Pedido de fila de propriedade de mutex

Digamos, se eu tiver três threads que acessem a mesma parte mutuamente exclusiva por meio de um mutex.

Deixe-me dar este exemplo.

O primeiro thread investiga o mutex e obtém sua propriedade primeiro:

//THREAD 1
//TIME: 2013-03-13 01:00:00.000Z
WaitForSingleObject(hMutex, INFINITE);

//Performs the operation that lasts 50 ms

ReleaseMutex(hMutex);

Então, 10 ms depois, o segmento 2 também o solicita:

//THREAD 2
//TIME: 2013-03-13 01:00:00.010Z
WaitForSingleObject(hMutex, INFINITE);
//Do work
ReleaseMutex(hMutex);

e 20 ms depois o thread 3 solicita também:

//THREAD 3
//TIME: 2013-03-13 01:00:00.030Z
WaitForSingleObject(hMutex, INFINITE);
//Do work
ReleaseMutex(hMutex);

Nessa situação, posso ter certeza de que o thread 2 sempre obterá a propriedade mutex antes do thread 3 (já que era "first in line", por assim dizer) ou será completamente arbitrário quem obterá a propriedade entre os threads 2 e 3?

E se for arbitrário com exclusões mutuais, como garantir que o primeiro encadeamento em espera obtenha a propriedade primeiro?

questionAnswers(2)

yourAnswerToTheQuestion