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

JDS*_*JDS 3 c multithreading operating-system void-pointers os161

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

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

void md_initpcb(struct pcb *, char *stack, void *data1, unsigned long data2,
    void (*func)(void *, unsigned long));
Run Code Online (Sandbox Code Playgroud)

关于代码,最后一个参数的含义是什么?它与代码或指令有关

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

对不起,如果这到处都是.作为参考,我正在启动OS161项目.

谢谢.

Mar*_*rst 7

这是一个函数指针.您传递一个返回void的函数的地址,并获取一个void指针和一个unsigned long.

所以,例如,如果你有一个功能:

void myfunc(void *data, unsigned long number);
Run Code Online (Sandbox Code Playgroud)

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

此函数是您要创建的线程将要执行的代码.完成后,线程也会完成.