によって引き起こされるスレッド不足私は2つのスレッド、タイトなループで動作するもの、そして時折最初に同期を実行する必要のある他のを持っていますスレッド2は、ロックを取ることによって、事実上スレッド1を一時停止し、必要な同期を実行することができるということである。スレッド1は、ロックを解除することによって一時停止することができ、スレッド2がロックを待っていない場合は、再ロックして作業に戻ることができます。のpthread:</p> <pre><code>// thread 1 while(1) { lock(work); // perform work unlock(work); } // thread 2 while(1) { // unrelated work that takes a while lock(work); // synchronizing step unlock(work); } </code></pre> <p>私の意図:迅速な再ロック
私が遭遇した問題は、mutexesが公平でないことです。つまり、スレッド1はすぐにmutexを再ロックし、スレッド2を飢えさせます。pthread_yield
を使用しようとしましたが、これまでは大丈夫ですが、すべてのシステム/コア数で動作することを確認してください。マルチコアシステムであっても、スレッド1が常にスレッド2になることを保証する方法はありますか?
この同期プロセスを処理する最も効果的な方法は何ですか?
条件変数を使用して、スレッド2が優先順位を高くし、次にスレッド1を達成する方法の1つにしたい場合、質問に記載されていることは公平性とは関係ありません。 – Michael
この質問は[*フェアクリティカルセクション(Linux)*](http://stackoverflow.com/q/6449732/134633)と非常によく似ています。 – caf