私の質問に部分的に一致する解決策はたくさんありますが、完全に一致するものが存在するかどうかを知りたいです。これらの部分的な解決策が検索結果を占めるため、完全な解決策を見つけるのは困難です。これはランタイムフレームワークであり、(オプションで)言語がコルーチンをサポートしていない場合に言語コードをソースするために必要な変換である必要があります。
lthread_cond_wait()APIを持つlthreadのようなライブラリがありますが、すべてのlthreadは単一のpthreadによって制限されます。軽量スレッドを複数のpthreadで実行できるようにしたいと思います。それらはスレッドプールによって任意に選択される必要があります。シングルスレッドスケジューラまたはグローバルロックスケジューラのいずれかが一致しません。私たちはもっとうまくやれると思います。
lthreadsは、ソースコードの変換を伴わず、プロトスレッドのように回避しないため、オプションではありません。
いくつかのグリーンスレッドランタイム(Erlang、Limbo)は、CSP(シーケンシャルプロセスの通信)モデルのみに制限されているため一致しませんが、共有メモリモデル同期プリミティブ(ミューテックス、条件変数、rwlocks)も必要です。
変革には以下が含まれます:
- スタックコンテキストをヒープ内のオブジェクトに変換する
- ミューテックス呼び出しを、スレッドプールとパブリッシュ/サブスクライブでのジョブの無効化とアクティブ化の操作に変換します
- 条件変数もパブリッシュ/サブスクライブリアルシップに変換する必要があります
- エイダスタイルのランデブーがあればいいのに
グローバルロックまたは単一のスケジューラスレッドを使用せずにパブリッシュ/サブスクライブメカニズムでデッドロックが発生する可能性があるため、単純なランタイム実装を実行できませんでしたが、それでも可能だと思います。