たとえば、ミューテックスを介して同じ相互に排他的な部分にアクセスする 3 つのスレッドがあるとします。
この例を挙げましょう。
最初のスレッドはミューテックスをプローブし、最初にその所有権を取得します。
//THREAD 1
//TIME: 2013-03-13 01:00:00.000Z
WaitForSingleObject(hMutex, INFINITE);
//Performs the operation that lasts 50 ms
ReleaseMutex(hMutex);
それから 10 ミリ秒後に、スレッド 2 もそれを要求します。
//THREAD 2
//TIME: 2013-03-13 01:00:00.010Z
WaitForSingleObject(hMutex, INFINITE);
//Do work
ReleaseMutex(hMutex);
そして 20 ミリ秒後にスレッド 3 もそれを要求します。
//THREAD 3
//TIME: 2013-03-13 01:00:00.030Z
WaitForSingleObject(hMutex, INFINITE);
//Do work
ReleaseMutex(hMutex);
この状況では、スレッド 2 が常にスレッド 3 の前にミューテックスの所有権を取得することを確認できますか (いわば「最初に」あったため)、またはスレッド 2 と 3 の間で誰が所有権を取得するかは完全に恣意的ですか?
また、ミューテックスで任意の場合、最初に待機しているスレッドが最初に所有権を取得するようにするにはどうすればよいですか?