c cant中的线程可以正常传递给makecontext

时间:2015-12-05 14:49:39

标签: c multithreading parameter-passing

我需要实现库来处理C中的线程。 用户应该传递线程的函数和它的参数 我需要为它处理和创建线程。 这是添加新线程的功能:

   BUILD FAILED

   Total time: 1 mins 20.379 secs

}

如您所见,用户应使用int param和argument。

传递void类型的函数

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

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 f2(int n) {
while (1) {
    printf("Thread #%d In progress:\n", n);
}

问题是,函数f2得到的参数总是-1。 所以我只是从所有线程中看到:

  

“线程-1正在进行中”

我想问题是我将参数传递给makecontext的方式......你看到我的代码有什么问题吗?

2 个答案:

答案 0 :(得分:1)

我用Google搜索并找到一个页面,说明makecontext()的第三个参数应该是参数的数量。 (this is the page供参考。此页面用日文写成)

未经测试,试试这个:

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

答案 1 :(得分:0)

根据makecontext的{​​{3}}:

  void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);

   ...

   The makecontext() function modifies the context pointed to by ucp
   (which was obtained from a call to getcontext(3)).  Before invoking
   makecontext(), the caller must allocate a new stack for this context
   and assign its address to ucp->uc_stack, and define a successor
   context and assign its address to ucp->uc_link.

我在您的代码中看不到对此getcontext()的此类调用。你的例子不完整吗?