マルチスレッドの Linux アプリケーションでは、クリティカル セクションにミューテックスを使用しています。これは、公平性の問題を除けば非常にうまく機能します。スレッドがクリティカル セクションを離れてすぐに再入力しても、他のスレッドにチャンスが与えられない場合があります。例えば
while(true)
{
critsect.enter();
... do calculations ...
... maybe call a blocking operation so we sleep ...
critsect.leave();
}
他のスレッドが同じクリティカル セクションに入るのを止める可能性が非常に高いです。Mutexe は公平ではありません。
公正なクリティカル セクションを作成するための解決策はありますか? クリティカルセクションが「到着」順に実行されるように、キューを追加することを考えていました。または、少なくとも、他のスレッドが待機している場合にロック解除後に pthread_yield() を実行するためのカウンター。
この種の要件に対して推奨される方法はありますか?