Скажите, если у меня есть три потока, которые имеют доступ к одной и той же взаимоисключающей части через мьютексы.Порядок размещения в очереди Mutex
Позвольте привести этот пример.
Первый поток зондов взаимную блокировку и получает свою долю первого:
//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?
И если это произвольно с мьютексами, как убедиться, что первый поток ожидания получает право собственности?
Нет, вы не можете ожидать логику FIFO от этих объектов. http://stackoverflow.com/questions/10461473/waitforsingleobject-do-threads-waiting-form-a-queue –