セマフォとミューテックスの違いを理解する

スポンサード リンク

このページでは主にプログラミングにおける排他機能に関する機能であるセマフォとミューテックスの違いに関して説明します。



セマフォ、ミューテックスともにタスク間の排他制御を行う機能です。排他制御の対象は「ファイル」「メモリ」「クリティカルセクション」などです。ミューテックスは回数を1回に限定したセマフォのようなものです。一般的にはミューテックスが使用されるようです。
本文では"タスク"と記載しているが使用するOSにより異なります。Windows環境なら "タスク" = "スレッド"となるでしょう。

排他制御では"優先度逆転現象"が問題となります。これは優先度の低いタスクがリソースをロックして優先度の高いタスクがリソースを利用できなくなる現象です。ミューテックスではこれを回避する仕組みが実装されている場合があります。(継承プロトコル)ただし実装はOSに依存します。

スポンサード リンク

(注意)分かりやすく簡単に記載しており、一部の環境や分野では記載内容が異なる可能性があります。あくまでも参考程度でお読みください。

比較表

比較は以下の表の通りとなります。

説明ミューテックスセマフォ
ロック方式
・排他制御に関してロック/非ロックのみ。

例えばミューテックスでは同時に一つのタスクのみクリティカルセクションに入ることができない。

バイナリセマフォとも呼ばれる。
・排他制御に関してカウント数で制御が可能。

例えばセマフォでは複数のタスクがクリティカルセッションに入ることができる。ただしカウント数が1の場合は(基本的に)ミューテックスと同じ動きとなる。
スペルMutex
Semaphore
鍵が一つしかない部屋
鍵が複数個ある部屋

スポンサード リンク







【注意】本ページは著作権で保護されています。内容は何人も補償しません。時間的あるいは金銭的損失等、一切保証しません。

理解しやすく記載されており、一部不正確な記載がある可能性があります。ご自身の責任で参考にしてください。