9

Unix 環境ではmakecontext()/swapcontext()、C でコルーチンを実装するために関数ファミリーが使用されることがあります。ただし、これらの関数は、スタックと実行フローを直接操作します。多くの場合、C から C++ に切り替えると、これらの低レベルの機能がまったく異なります。

makecontext()問題は、 andを使用してコルーチンを実装する際に問題があるかどうかswapcontext()です。もちろん、例外がそのようなコルーチンを決してエスケープできないように、非常に細心の注意を払う必要があることは明らかです。これは、スタックに例外ハンドラーがなく、プログラムが segfault になる可能性が高いためです。しかし、それ以外に、C++ が内部で物事を処理する方法と実行パスmakecontext()を変更する方法との間に互換性がないことはありますか?setcontext()

4

1 に答える 1

7

makecontext()以前に C++ コードで/を使用swapcontext()したことがありますが、あなたが言うように、注意すべき主なことは例外です。それ以上、困ったことはありません。標準に従って時代遅れになっているにもかかわらず、UNIX ライクなオペレーティング システムによって依然として十分にサポートされています。(Mac OS X には注意点があります。関連するヘッダーの#define _XOPEN_SOURCE#includingにする必要があります。) それらを廃止する理由もかなり不十分です。関数ポインターが単一のヘッダーを取る pthreads のようなバージョンに置き換えることができたはずです。 void* 引数。

あなたが言うように、スレッドは有用な代替物ではないので、先に進んで使用しますswapcontext(). このブログ投稿は、独自のバージョンの関数を展開するのにも興味深いかもしれません。

于 2012-02-25T21:27:09.863 に答える