2

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

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 功能运行良好。但我无法获得正确的线程上下文。我真的很困惑。希望有人可以帮助我。谢谢。

4

1 回答 1

0

我已经回答了一个类似的问题。请看这个

尝试改用“sigsetjmp/siglongjmp”。

于 2013-09-11T05:41:41.380 回答