ReleaseMutex

指定されたミューテックスオブジェクトの所有権を解放します。

BOOL ReleaseMutex(
    HANDLE  hMutex        // ミューテックスのハンドル.
);

KERNEL32.DLL

引数

hMutex

ミューテックスオブジェクトのハンドルを指定します。このハンドルはCreateMutex関数またはOpenMutex関数によって返されます。

戻り値

成功すると0以外の値が返ります。

失敗すると0が返ります。拡張エラー情報を取得するには、GetLastError関数を使います。

解説

呼び出しスレッドが指定されたミューテックスオブジェクトを所有していない場合、ReleaseMutex関数は失敗します。

スレッドは、ミューテックスオブジェクトの作成時にbInitalOwnerパラメータにTRUEを指定するか、またはWaitForSingleObject関数などの待機関数を呼び出す際にミューテックスオブジェクトのハンドルを指定することで、ミューテックスオブジェクトの所有権を獲得することができます。このとき、指定されたミューテックスオブジェクトが他のスレッドに所有されているときは、他のスレッドがミューテックスオブジェクトを解放するまでスレッドの実行が停止されます。

ミューテックスオブジェクトを所有するスレッドは、もはやそのオブジェクトを所有する必要がなくなったときにReleaseMutex関数を呼び出して所有権を解放しなくてはなりません。

ミューテックスを所有しているスレッドは、同一のミューテックスに対して繰り返し待機関数呼び出しても実行がブロックされることはありません。これにより、スレッドがすでに所有しているミューテックスを待機しようとしてデッドロックに陥ってしまうことを防ぎます。ただし、ミューテックスの所有権を解放するには、スレッドは(CreateMutexまたは待機関数によって)所有権を取得した回数のそれぞれに対して1度ずつReleaseMutexを呼び出さなくてはなりません。

対応情報

Windows 95 以降 / Windows NT 3.1 以降