gpt4 book ai didi

c++ - 根据 getcontext 和 setcontext 实现 swapcontext

转载 作者:行者123 更新时间:2023-11-28 07:21:04 30 4
gpt4 key购买 nike

int swapcontext(ucontext_t *oucp, ucontext_t *ucp);
int getcontext(ucontext_t *ucp);
int setcontext(const ucontext_t *ucp);

如果我的理解是正确的,swapcontext相当于先在oucp上调用getcontext,然后在ucp上调用setcontext。我正在尝试查看如何使用 getcontext 和 setcontext 实现 swapcontext。

int swapcontext(ucontext_t *oucp, ucontext_t *ucp)  
{
getcontext(oucp);
setcontext(ucp);
}

问题是 oucp 的上下文在错误的行,我想调用 getcontext 的方式是下一行是 setcontext(ucp) 之后的行。但是,setcontext 不会返回,所以我不能那样做。此外,如果我以这种方式实现 swapcontext,如果我将相同的参数传递给 oucp 和 ucp,我将被卡住。

如何使用这两个函数实现 swapcontext?还是不可能?

最佳答案

这是一种方法。思路是在第一次调用setcontext()时设置一个boolean变量,这样第二次getcontext()返回时,可以跳过 setcontext() 调用。

int swapcontext(ucontext_t *oucp, ucontext_t *ucp) {
volatile bool swapped = false;
int result = getcontext(oucp);
if (result == 0 && !swapped) {
swapped = true;
result = setcontext(ucp);
}

return result;
}

关于c++ - 根据 getcontext 和 setcontext 实现 swapcontext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19469000/

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