gpt4 book ai didi

c - thread_fork 在内核上工作

转载 作者:行者123 更新时间:2023-11-30 17:37:51 25 4
gpt4 key购买 nike

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

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

int id = 1;

长 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,无符号长数据2,
void (*func)(void *, 无符号长整型),
结构线程 **ret);

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

这不是实现线程代码的正确方法吗?我有什么地方出错了吗?

最佳答案

我不熟悉 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);

这是一个worked example on function pointers .

关于c - thread_fork 在内核上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22274198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com