0

我正在研究主要不支持 C pthread 库的 OS161。我目前的目标是了解系统调用并运行一些简单的程序。

我的简单函数有以下代码:

int id = 1;

long id2 = 1;

int ret = thread_fork("myThread", (void *)id, id2, void (*function)((void *)id, id2), NULL);

    kprintf("\nHello World\n");
    return;

`

对 thread_fork 的调用在哪里int thread_fork(const char *name, void *data1, unsigned long data2, void (*func)(void *, unsigned long), struct thread **ret);

我在启动时更改了 conf.kern 文件以包含此文件,并更改了 main.c 以添加此函数调用。如果我删除线程调用,一切正常。

这不是实现线程代码的正确方法还是我在任何地方都出错了?

4

1 回答 1

0

我对 OS161 不熟悉,但是您在 C 中传递函数指针的语法错误,并且您没有给出thread_fork任何返回线程指针的地方。

首先,函数指针。thread_fork需要一个指向带有两个参数的函数的指针。您的函数应如下所示:

void function(void *data1, unsigned long data2) {
    kprintf("Called with data1=%p, data2=%ld\n", data1, data2);
}

然后你的电话thread_fork看起来像这样。请注意,返回的线程指针有存储空间,如果 OS161 不处理 NULL 情况,这可能是必需的:

int id1 = 1;
unsigned long id2 = 2;
struct thread *thr;

thread_fork("myThread", &id1, id2, function, &thr);

这是一个关于函数指针的工作示例

于 2014-03-08T22:46:37.460 回答