C编程-线程,以及什么是void(*func)(void*,无符号长)
我正在考虑修改一个玩具操作系统,我只是想学习一些代码和它的功能。我得到了一个“线程”结构,它的一个成员是“pcb”结构,它是一个进程控制块,将线程连接到底层物理硬件 无论如何,在这个“pcb”结构中有一个初始化函数,它初始化新创建线程的pcb。以下是函数定义:C编程-线程,以及什么是void(*func)(void*,无符号长),c,multithreading,operating-system,void-pointers,os161,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));
void md_initpcb(struct pcb *, char *stack, void *data1, unsigned long data2,
void (*func)(void *, unsigned long));
关于代码,最后一个参数的含义是什么?它与代码或指令有关吗
从概念上讲,我对事物如何融入更大的图景感到困惑。据我所知,线程是代码的执行单元;例如,它可能与用户程序有关,因此在线程之间快速切换会产生并行运行进程的错觉。好的,所以这个线程需要它自己的堆栈、寄存器(不理解)和一些控件(pcb)
很抱歉,这里到处都是。作为参考,我现在开始
谢谢。这是一个函数指针。将返回void并接受void指针和无符号long的函数的地址传递给它 例如,如果您有一个函数:
void myfunc(void *data, unsigned long number);
然后可以将其作为第四个参数传递给md\u initpcb
此函数是您正在创建的线程将要执行的代码。当它完成时,线程也将完成。void(*func)(void*,unsigned long)
意味着func
是指向函数的指针,该函数采用void*
和unsigned long
,并返回void
。
我猜这个参数就是新线程将要运行的函数,而data1和data2是新线程将传递给这个函数的参数。函数指针语法一开始特别混乱,但你最终学会了识别它。谢谢你,我直觉上是这么想的(传递线程将执行的指令)