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

时间:2012-01-18 23:07:33

标签: 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));

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

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

很抱歉,如果这种情况到处都是。作为参考,我开始OS161 project

感谢。

2 个答案:

答案 0 :(得分:7)

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

所以,例如,如果你有一个函数:

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

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

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

答案 1 :(得分:2)

void (*func)(void *, unsigned long)表示func是指向void*unsigned long并返回void的函数的指针。 我猜这个参数是新线程运行的函数,data1和data2是新线程传递给该函数的参数。