私はこの質問に対する答えを1日探していましたが、簡単な答えを見つけることができません。私はコンテキスト切り替えの待機キューを読んでいて、そのようなものはすべてをよく理解しています。そして、記事を読んだときに、コンボイの状況が発生すると、コンテキスト切り替えがたくさんあると書かれていました。だから私はこれをまっすぐにしましょうスレッドがミューテックスのロックを解除するために待機キューにあると仮定しましょう、CPUは常にその待機中のスレッドにコンテキストスイッチして、待機しているミューテックスがロック解除されているかどうかを確認します。これが当てはまる場合、つまり、スレッドがミューテックスのロック解除または条件変数の通知を待機するたびに、CPUコンテキストはそれらのスレッドに切り替えてチェックします。私は正しいですか?ご協力いただきありがとうございます。
1 に答える
2
OSレベルのミューテックス(ユーザーモードの回転なし)について話していると思います。
OSは、ミューテックスが解放されるまで、待機中のスレッドを永続的にスケジュール解除します。待機中のミューテックスのロックが解除された場合にのみ、OSは1つ以上の待機中のスレッドが実行を再開するようにスケジュールします。
これは、待機中のスレッドによって引き起こされるオーバーヘッドがないことを意味します。OSにはビジーループスピン(「スイッチング」)はありません。ミューテックスが利用可能になった瞬間にOSがウェイターのブロックを解除するだけなので、その必要があります。
すべてのスレッドが、リリースされることのないミューテックスを待機していたと想像してください。その場合、ウェイターは決して走らず、彼らは決して切り替えられません。
于 2013-03-24T11:53:56.913 に答える