コンピュータ

ミューテックスとは

ミューテックス

ミューテックス(英:mutex)とは、複数のプログラム(タスク)が同時に処理を行う環境(並列処理)で、共有資源に対して同時にアクセスしても問題なく動作できる仕組みのひとつです。

共有資源に対して同時にアクセスしても問題なく動作できる仕組みのことを「排他制御」といい、排他制御には「ロック」「ミューテックス」「セマフォ」などがあります。

複数のプログラム(タスク※1)が共有資源に同時にアクセスするとき、最初のプログラムが共有資源をロック(ミューテックスオブジェクトを非シグナル状態にする)し、ロック中はロックが解放されるまで他のプログラムは共有資源にアクセスができず待機します。

そして、ロック中のプログラム(タスク)の処理が終了すると、他のプログラムが利用できるようにロックを解除(ミューテックスオブジェクトをシグナル状態にする)します。

※1:ここで言うタスクとは、スレッドまたはプロセスを指す

以下の図は、ミューテックスのイメージ例です。

ミューテックスのイメージ例

  1. プログラムAがミューテックスオブジェクトを非シグナル状態(所有不可)にする
  2. プログラムBがアクセスするもミューテックスオブジェクトが非シグナル状態(所有不可)のため待機する
  3. プログラムAの処理が終わったので、ミューテックスオブジェクトをシグナル状態(所有可能)に戻す
  4. プログラムBがミューテックスオブジェクトを非シグナル状態(所有不可)にする
  5. プログラムBの処理が終わったので、ミューテックスオブジェクトをシグナル状態(所有可能)に戻す

このようにミューテックスでは、共有資源に対してアクセスできるのは常に1つのタスク(複数のタスクが同時に共有資源にアクセスすることはできない)になるように制御しています。

helpful