1. ホーム
  2. c++

C++でコルーチンを実装する方法

2023-12-18 14:01:58

質問

移植可能かどうか疑問ですが、何か解決策はないでしょうか。 代替スタックを作成し、関数エントリでSP,BP,IPをリセットし、イールドがIPを保存してSP+BPを復元することで可能だと思います。 デストラクタと例外安全性はトリッキーに見えますが、解決可能です。

それは行われましたか? それは不可能ですか?

どのように解決するのですか?

はい、そうです。 することができます 問題なくできます。必要なのは、呼び出しスタックをヒープ上の新しく割り当てられたスタックに移動するための、ちょっとしたアセンブラコードだけです。

私なら を見ます。 boost::coroutine ライブラリ .

気をつけなければならないのは、スタックオーバーフローです。ほとんどのオペレーティング システムでは、スタックをオーバーフローさせると、仮想メモリ ページがマッピングされないため、セグメンテーション フォールトが発生します。しかし、ヒープ上にスタックを割り当てた場合、何の保証も得られません。 このことを覚えておいてください。

Reference
この問題について(C++でコルーチンを実装する方法) , 我々は、より多くの情報をここで見つけました https://stackoverflow.com/questions/121757/how-do-you-implement-coroutines-in-c

テキストは自由に共有またはコピーできます。 ただし、このドキュメントのURLは参考URLとして残しておいてください。

Collection and Share based on the CC Protocol