使用swapcontext()或getcontext()& setcontext()为线程库编写yield()函数

时间:2013-09-11 03:08:40

标签: c multithreading

我们需要实现一个线程库。但我真的无法工作这个yield()函数了... 所以在yield()中,我们需要将当前线程推送到就绪线程队列的末尾,然后弹出第一个线程并执行它。(FIFO)我使用的是swapcontext()。所以我的代码是这样的。

yield()
{
 if(head!=NULL) // if FIFO is not empty, yield to a ready thread`
 {
    ready_queue_entry * old_thread= NULL;
    old_thread = new_thread;

    Push(old_thread);// push the current one to the FIFO
    new_thread = Pop();// pop the first one from the FIFO

    //save the current context and jump to the new thread context.
    swapcontext(&(old_thread->context),&(new_thread->context)); 
  }
}

我确信我的Pop和Push功能运行良好。但我无法获得正确的线程上下文。我真的很困惑。希望有人可以帮助我。谢谢。

1 个答案:

答案 0 :(得分:0)

我已经回答了类似的问题。请参阅this one

尝试使用“sigsetjmp / siglongjmp”。