2011-02-10 9 views
4

私はmutexとバイナリセマフォが1つの側面でのみ異なっていることを読んでいます。mutexの場合、ロックスレッドはロックを解除する必要がありますが、セマフォではロックとアンロックのスレッドが異なる可能性があります。実装でのセマフォとmutexの違いは何ですか?

どれが効率的ですか?

+0

可能な複製[バイナリセマフォとmutexの違い](http://stackoverflow.com/questions/62814/difference-between-binary-semaphore-and-mutex)また、参照してください:[ロック、ミューテックス、セマフォ...違いは何ですか?](http://stackoverflow.com/questions/2332765/)、[いつミューテックスを使用する必要がありますし、いつセマフォを使用する必要がありますか?あなたはC++のミューテックスよりもどのような状況でセマフォーを使用していますか?](http://stackoverflow.com/questions/2350544/)など –

答えて

4

あなたはsempahoreとミューテックスの基本的な違いを知っていると仮定すると:速く、簡単な同期のために

を、crticialセクションを使用します。

プロセスの境界を越えてスレッドを同期させるには、mutexを使用します。

制限付きリソースへのアクセスを同期するには、セマフォを使用します。

mutexに所有者があるという事実を別にすれば、2つのオブジェクトは異なる用途に合わせて最適化することができます。ミューテックスは短時間だけ保持されるように設計されています。これを犯すとパフォーマンスが低下し、不公平なスケジュールが発生する可能性があります。例えば、実行中のスレッドは、別のスレッドが既にブロックされていても、ミューテックスを取得することが許可されている可能性があります。セマフォはより公平を提供することができ、公平性はいくつかの条件変数を使用して強制することができます。

+0

"プロセス境界を越えて"、do 2つの異なるプロセスの下で作成された2つのスレッド間で同期をとることを意味しますか? – Pacerier

関連する問題