1

最近、クラスで同期について学びましたが、信号とブロードキャストの違いについて少し混乱しています。シグナルが発生すると、待機リストの最初のスレッドが起動されます。そのスレッドは、シグナル スレッドのロックが解除された後にロックを要求します。では、放送はどうなるでしょうか。ブロードキャストが呼び出されると、待機中のすべてのスレッドが起動されます。次に、ブロードキャスト スレッドのロックが解除されたとき、これらのスレッドのどれがそのロックを取得するのでしょうか?

4

1 に答える 1

1

すべてのスレッドがブロック解除されます。それらはすべてロックを取得しようとします。どちらが成功しても、最初waitにロックを保持している関数から戻ります。そのスレッドが後でロックを解放すると、まだロックを取得しようとしているスレッドの 1 つがロックを取得します。

実際には、ブロードキャストでOSが待機リストを直接移動し、ロックの取得を待機しているスレッドのリストに追加すると思われます(そのようなリストを優先順位で並べ替える場合は優先順位を考慮します)。しかし、それは実装の詳細です。

于 2013-02-28T11:00:00.850 に答える