ミューテックス |
辞書:電算用語の基礎知識 計算機OS機能編 (TCOS) |
読み:ミューテックス |
外語:mutex: mutual exclusion |
品詞:名詞 |
並行して動作するプロセスなどの間で、同期をとったり、排他制御をするための機構の一つ。mutexは、Mutual Exclusion(相互排除)の省略形となる造語である。
|
概要 |
セマフォに似ているが、よりシンプルである。OSによって、セマフォしかない環境も、ミューテックスしかない環境も実在する。
実装の仕様自体も様々で一般論になるが、セマフォとミューテックスの違いは、セマフォは複数のロックが可能なのに対してミューテックスは一つのみ可能、デッドロック回避の機構がある、ロック状態でプロセス(ないしスレッド)を終了させても自動的に解放される、などの違いがある。
特徴 |
動作 |
ミューテックスは、ロック、アンロックという二つの状態を取り得る。
ロック状態とは、いずれかのスレッドに保有されている状態であり、アンロック状態とは、いずれのスレッドにも保有されていない状態をいう。
一つのミューテックスを、二つ以上のスレッドが同時に保有することはない。
この性質を用いて、ミューテックスのロックという処理を使うことでアトミックな動作を実現させる。
POSIX |
POSIXスレッドのミューテックスは、主として次の二つの関数を使う。
引数として、pthread_mutex_tを使う。
なお、pthread_mutex_lockはブロックするが、ブロックしないpthread_mutex_trylockを使うこともできる。
Linux |
Linuxカーネルのミューテックスは、主として次の関数を使う。
引数として、struct mutexを使う。
なお、mutex_lockはブロックするが、ブロックしないmutex_trylockを使うこともできる。
Windows |
Windowsでは、引数にユニークな文字列を与えることでミューテックスのハンドルを得、これによってアトミックな動作を実現できる。
一般的な用例として、アプリケーションソフトウェアの多重起動を防止する例を次に掲げる。
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // グローバルなMutexの作成 HANDLE hmutex = CreateMutex(NULL, TRUE, _T("Global\\ユニークな文字列")); if (GetLastError() == ERROR_ALREADY_EXISTS) { // すでに起動している } else { // まだ起動していない } // 使用後は必ず後始末をする ReleaseMutex(hmutex); CloseHandle(hmutex); }
既に起動している場合は、そのまま終了させれば、多重起動を防止することができる。
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |