C - thread_fork在内核上工作



我正在OS161上工作,其中不主要支持C pthread库。我当前的目标是理解sys调用并使一些简单的程序运行。

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

int id = 1;

long id2 = 1;

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

    kprintf("nHello Worldn");
    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来添加这个函数调用。如果我删除线程调用,一切都可以正常工作。

是不是实现线程代码的正确方法我哪里出错了吗?

我不熟悉OS161,但你已经得到了语法传递一个函数指针在C错误,你没有给thread_fork任何地方返回线程指针。

首先是函数指针。thread_fork需要一个指向有两个形参的函数的指针。你的函数应该是这样的:

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

那么你对thread_fork的调用看起来像这样。请注意,返回的线程指针有存储空间,如果OS161不处理NULL情况,这可能是必要的:

int id1 = 1;
unsigned long id2 = 2;
struct thread *thr;
thread_fork("myThread", &id1, id2, function, &thr);

最新更新