3

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

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

void md_initpcb(struct pcb *, char *stack, void *data1, unsigned long data2,
    void (*func)(void *, unsigned long));

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

从概念上讲,我对事物如何融入更大的图景感到困惑。据我所知,线程是代码的执行单元;例如,它可能与用户程序有关,因此在线程之间快速切换会产生并行运行进程的错觉。好吧,所以这个线程需要它自己的堆栈、寄存器(不明白)和一些控制(pcb)。

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

谢谢。

4

2 回答 2

7

这是一个函数指针。您将一个函数的地址传递给它,该函数返回 void 并接受一个 void 指针和一个无符号长整数。

因此,例如,如果您有一个功能:

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

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

此函数是您正在创建的线程将要执行的代码。当它完成时,线程也将完成。

于 2012-01-18T23:09:03.413 回答
2

void (*func)(void *, unsigned long)表示这func是一个指向接受void*andunsigned long和 return的函数的指针void。我猜这个参数是新线程要运行的函数,data1和data2是新线程要传给这个函数的参数。

于 2012-01-18T23:12:37.340 回答