5

別のスレッド (プロデューサー) から通知される条件変数に、N 個の待機中のスレッド (リーダー) があるとします。これで、N 人のすべてのリーダーが、参照する unique_lock を一度に 1 つずつ所有しようとします。ここで、プロデューサが何らかの理由で同じ unique_lock を再びロックしたいと考えているとします。標準では、通知されたすべてのリーダーがロックステップを開始した後にのみ、プロデューサーがクリティカルセクションに正常に入る (しようとする) という保証はありますか?

4

1 に答える 1

6

§1.10 パラグラフ 2 で与えられたかなりあいまいなものを除いて、スケジューリングについての保証はありません。

実装は、ブロックされていないすべてのスレッドが最終的に進行することを保証する必要があります。[注:標準ライブラリ関数は、I/O またはロック時にサイレントにブロックする場合があります。外部から課せられたスレッドの優先度など、実行環境の要因により、実装が前進の特定の保証を行うことが妨げられる場合があります。—<em>終わりのメモ]

プロデューサーの前にリーダーがロックを取得しないようにしたい場合は、通知する前にロックを取得するだけです。

すべてのリーダーがロックを取得した後にのみプロデューサーがロックを取得できるようにしたい場合は、おそらく何らかのカウンターを含む、より複雑な同期が必要です。

于 2012-12-18T12:03:14.633 に答える