C 编程 - 线程,以及什么是 void (*func)(void*, unsigned long)

标签 c multithreading operating-system void-pointers os161

我正在考虑修改一个玩具操作系统系统,我只是想学习一些代码及其功能。我得到了一个“线程”结构,它有一个“pcb”结构作为成员,我猜这是一个将线程连接到底层物理硬件的过程控制 block 。

无论如何,在这个“pcb”结构中有初始化新创建线程的pcb 的初始化函数。这是函数定义:

void md_initpcb(struct pcb *, char *stack, void *data1, unsigned long data2,
    void (*func)(void *, unsigned long));

关于代码,最后一个参数是什么意思?是否与代码或说明有关

从概念上讲,我对事物如何融入大局感到困惑。据我所知,线程是代码执行的单位;例如,它可以与用户程序相关,因此在线程之间快速切换会产生并行运行进程的错觉。好吧,这个 Thread 然后需要它自己的堆栈、寄存器(不明白)和一些控制(pcb)。

对不起,如果这有点到处都是。作为引用,我正在启动 OS161 project .

谢谢。

最佳答案

这是一个函数指针。您将函数的地址传递给它,该函数返回 void 并采用 void 指针和 unsigned long。

因此,例如,如果您有一个函数:

void myfunc(void *data, unsigned long number);

然后您可以将它作为第四个参数传递给 md_initpcb

此函数是您正在创建的线程将要执行的代码。当它结束时,线程也将结束。

关于C 编程 - 线程,以及什么是 void (*func)(void*, unsigned long),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8918857/

相关文章:

c - 字符串的快速排序数组在 C 中给出错误

c++ - SDL 2.0 我可以不在主线程中运行它吗?

java - 在java中杀死一个正在运行的线程?

c - 为什么我不能在 C 中使用函数参数作为数组大小?

编译器没有看到我的元素被添加到我的数组中

c# - 防止应用程序关闭

multithreading - CPU时间片的可调度单位是进程还是线程?

assembly - 为什么传统模式下的 syscall/sysret 被认为是 "sufficiently poorly designed"?

python - 对于 Linux 新用户来说,在 python 中获取登录名的简单方法是什么?

c++ - C 和 C++ 奇怪的语法 "unsigned int :32;"