我们需要实现一个线程库。但是我真的无法将这个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 功能运行良好。但我无法获得正确的线程上下文。我真的很困惑。希望有人可以帮助我。谢谢。