すみません、ミューテックスについて教えてください。

複数スレッドの処理で、下記のようなミューテックスの処理を行ってました。

コンストラクタ
mutex = CreateMutex(NULL, FALSE, NULL);
ReleaseMutex(mutex);


スレッド内処理
ReleaseMutex(mutex);
WaitForSingleObject(mutex, INFINITE);
ReleaseMutex(mutex);
WaitForSingleObject(mutex, INFINITE);

スレッド内処理で最初に無駄なReleaseMutex()をしており、さらに最後にReleaseMutex()をしてなかった為
スレッド間でデッドロックが起こるかと思いきや、問題ありませんでした。
これは最初のReleaseMutex()が予約の様な動きを行っているのですか?
どなたかReleaseMutex()の動きを教えてください。