条件は、可能な限りミューテックスの外部で通知する必要があります。ミューテックスは、並行プログラミングにおける必要悪です。それらを使用すると競合が発生し、複数のプロセッサを使用することで得られる最大のパフォーマンスがシステムから奪われます。
ミューテックスの目的は、プログラム内の一部の共有変数へのアクセスを保護して、それらがアトミックに動作するようにすることです。シグナル操作がミューテックス内で実行されると、共有データの保護とは関係のない何百もの無関係なマシン サイクルがミューテックスに含まれます。潜在的に、ユーザー空間からカーネルまで呼び出します。
標準の「予測可能なスケジューラの動作」に関するメモは完全に偽物です。
マシンに、予測可能な適切に定義された順序でステートメントを実行させたい場合、そのためのツールは、単一の実行スレッド内でのステートメントの順序付けですS1 ; S2
。ステートメントS1
は の前に「スケジュール」されていS2
ます。
一部のアクションが独立しており、それらのスケジューリング順序が重要ではなく、リアルタイム イベントへのよりタイムリーな応答や複数のプロセッサでの計算など、実現すべきパフォーマンス上の利点があることに気付いた場合に、スレッドを使用します。
複数のスレッド間でスケジューリング順序が重要になる場合、これは優先順位と呼ばれる概念に該当します。優先度は、N 個のステートメントのいずれかが実行されるようにスケジュールされる可能性がある場合に、最初に何が起こるかを解決します。マルチスレッドで注文するためのもう 1 つのツールはキューイングです。イベントは 1 つ以上のスレッドによってキューに入れられ、1 つのサービス スレッドがキューの順序でイベントを処理します。
結論として、 の配置はpthread_cond_broadcast
実行順序を制御するための適切なツールではありません。プログラムがすべてのプラットフォームでまったく同じ再現可能な動作を突然持つという意味で、実行順序を予測可能にすることはできません。