c++ - 通过getcontext和setcontext实现swapcontext

标签 c++ c ucontext

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/

相关文章:

c++ - 如何链接一个使用其他库的静态 C 库

c - 在linux中检索EBP寄存器的内容

c++ - 找出哪个对象/数组使用最多的堆栈内存

将迭代算法转换为递归算法

c++ - 另一个模板(同一类)的模板特化

c - 为什么 PK11_GenerateRandom() 会返回错误 -8023?

c - 为什么 makecontext 不调用我的函数?

c - getcontext 和 setcontext 在函数中不起作用

c++ - 在主程序或函数子程序中使用数组的区别

c++ - OpenCV solvePnP 获取相对于相机的图案原点位置