gpt4 book ai didi

c - c 中的线程无法正确地将函数传递给 makecontext()

转载 作者:行者123 更新时间:2023-11-30 15:14:19 25 4
gpt4 key购买 nike

我需要实现一个库来使用 C 语言的线程。用户应该传递线程的函数及其参数,然后我需要为其处理和创建线程。这是添加新线程的函数:

    int add_thread(void (*func)(int), int arg) {
printf("Adding thread #%d with arg:[%d] \n", threadsAdded, arg);
////// create the thread.....

makecontext(&uc[threadsAdded], (void (*)(void)) func, arg);

More none important things....

}

正如您所看到的,用户应该传递带有 void 类型、int 参数和参数的函数。

所以我尝试添加这个功能:

void f2(int n) {
while (1) {
printf("Thread #%d In progress:\n", n);
}

像这样:

 add_thread(f2, 1);
add_thread(f2, 2);
add_thread(f2, 3);
add_thread(f2, 199);

问题是,函数 f2 获取的参数始终为 -1。所以我只是从所有线程中看到:

"Thread -1 In progress"

我猜问题是我将参数传递给 makecontext() 的方式...您发现我的代码有任何问题吗?

最佳答案

我用谷歌搜索,发现一个页面说 makecontext() 的第三个参数应该是参数的数量。 (this is the page供引用。此页面是用日语写的)

未经测试,试试这个:

makecontext(&uc[threadsAdded], (void (*)(void)) func, 1, arg);

关于c - c 中的线程无法正确地将函数传递给 makecontext(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34106827/

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