Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C编程-线程,以及什么是void(*func)(void*,无符号长)_C_Multithreading_Operating System_Void Pointers_Os161 - Fatal编程技术网

C编程-线程,以及什么是void(*func)(void*,无符号长)

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));

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

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

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是新线程将传递给这个函数的参数。

函数指针语法一开始特别混乱,但你最终学会了识别它。谢谢你,我直觉上是这么想的(传递线程将执行的指令)