【发布时间】:2013-03-13 19:57:27
【问题描述】:
假设我有三个线程都通过互斥锁访问同一个互斥部分。
让我举个例子。
第一个线程探测互斥体并首先获得其所有权:
//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 逻辑。 stackoverflow.com/questions/10461473/…
标签: c++ winapi synchronization mutex