1

私は現在、複数のハードウェアスレッド上のスケジューラー間のロードバランシングのために仕事を盗んでいる緑色のスレッドを持つC++用の並行性ライブラリーに取り組んでいます。メインスレッドのコンテキストが異なるハードウェアスレッドで返され、未定義の動作ですか?

メインコンテキストをハードウェアスレッドに固定しました。つまり、盗まれずに他のハードウェアスレッドに移行することができます。

私はこれを読んだことがあると思いますが、主なコンテキストが別のハードウェアスレッドでどこから盗まれて戻ってくるか(exit)どこから出たのかは未定義の動作です。しかし、私は今これに関する情報源を見つけることができないようです。

これは未定義の動作ですか?ソースを引用すれば完璧です。

答えて

1

まず、標準C++には緑色スレッドはありません。だから、あなた自身のスタックを作り、それらを置き換えることのすべては、未定義の振る舞いです。 UBは、何かがうまくいかないことを意味するものではありません。つまり、標準に準拠したどのシステムでも動作するという保証はありません。

グリーンスレッド/コルーチンはUBのエッジでバランスが取れており、サポートされているプラ​​ットフォームごとに実装されています。彼らは特定のプラットフォーム用に書かれているため、これらのプラットフォーム上で異なる陥ったものを克服するためのクルージングがあります。

関連する問題