gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:11 26 4
gpt4 key购买 nike

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

最佳答案

我回答过类似的问题。请看this one

尝试改用“sigsetjmp/siglongjmp”。

关于c - 使用 swapcontext() 或 getcontext() & setcontext() 为线程库编写 yield() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18732008/

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