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 のコンテキストが間違った行にあることです。次の行が setcontext(ucp) の次の行になるように getcontext を呼び出したいと考えています。ただし、 setcontext は返されないため、それはできません。さらに、この方法で swapcontext を実装すると、oucp と ucp に同じ引数を渡すとスタックしてしまいます。
これら 2 つの関数を使用して swapcontext を実装するにはどうすればよいでしょうか。それとも無理ですか?