首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >thread_fork在内核上的工作

thread_fork在内核上的工作
EN

Stack Overflow用户
提问于 2014-03-08 19:47:17
回答 1查看 2.7K关注 0票数 0

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

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

int id = 1;

long id2 = 1;

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

代码语言:javascript
复制
    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以添加此函数调用。如果删除线程调用,一切都会正常工作。

这不是实现线程代码的正确方式,还是我哪里都出错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-08 22:46:37

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

首先,函数指针。thread_fork需要一个指向接受两个参数的函数的指针。您的功能应该如下所示:

代码语言:javascript
复制
void function(void *data1, unsigned long data2) {
    kprintf("Called with data1=%p, data2=%ld\n", data1, data2);
}

那么你打给thread_fork的电话看起来是这样的。注意,返回的线程指针有存储空间,如果OS161不处理空情况,这可能是必要的:

代码语言:javascript
复制
int id1 = 1;
unsigned long id2 = 2;
struct thread *thr;

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22274198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档