我正在考虑修改一个玩具操作系统系统,我只是想学习一些代码及其功能。我得到了一个“线程”结构,它有一个“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/