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()
时设置一个 bool 变量,以便第二次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/