假设我有三个线程都通过互斥锁访问相同的互斥部分。
让我给你这个例子。
第一个线程探测互斥体并首先获得其所有权:
//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 之间获得所有权完全是任意的?
如果互斥锁是任意的,如何确保第一个等待线程首先获得所有权?