セマフォは、ミューテックスを置き換えることができます。mutexとセマフォの両方が必要なのはなぜですか?
- )は、(1つの
- ロックとSEMを初期化します(sem_waitを行います)。 (クリティカルセクションではsem = 0)
- unlock():do sem_post(1);
なぜmutexが必要なのですか?
セマフォは、ミューテックスを置き換えることができます。mutexとセマフォの両方が必要なのはなぜですか?
なぜmutexが必要なのですか?
セマフォは一般化されたmutexです。シングルバッファの代わりに、4KBのバッファを4つの1KBバッファ(同一のリソース)に分割することができます。これらの4つのバッファにセマフォを関連付けることができます。消費者と生産者は、同時に異なるバッファで作業することができます。
ミューテックスは、コードのクリティカルセクションを保護するために主に存在します。セマフォと比較すると、コードがより簡単で短く、またはより豊富な機能を提供できるため、セマフォよりも優れたパフォーマンスを実現できます。
mutexには、「通常の」ミューテックス、再帰的なミューテックス、共有ミューテックス(リーダーライターロック)など、さまざまな種類があります。いくつかのミューテックス実装では、優先度の逆転を優先させるために "優先度の継承"を実装しようとする可能性があります。セマフォの使用パターンが広すぎるため、これはセマフォーには実装できません。
一般的なエンティティがある場合、なぜ特殊なエンティティが必要ですか?なぜ私たちはいつも一般化されたものを使うことができないのですか? – pavelkolodin