这里有一个互斥锁数组。
- 检查互斥锁是否被锁定
2a. 如果没有锁定,就锁定它
2b. 如果已经锁定,就等待解锁并锁定它
另一个函数负责解锁。
问题在于,在等待部分出现了崩溃:
HANDLE mutexes[N];
void func(int i)
{
// (*) wait until unlocked or create if unlocked
while ((mutexes[i] = CreateMutex(NULL, TRUE/*same with FALSE*/, NULL)) != NULL);
/*or WaitForSingleObject(mutexes[i], INFINITE)*/
mutexes[i] = CreateMutex(NULL, TRUE, NULL);
}
在 (*) 点,我遇到了崩溃 - 访问冲突。当它尝试创建先前已经创建的mutexes[i]时,就会发生崩溃。我不能使用WaitForSingleObject,因为第一次mutexes[i]没有被创建,文档说WaitForSingleObject未定义。而且如果我使用这个函数,我会遇到同样的崩溃。
我只需要类似于这种简单伪代码的模拟
if (mutex_has_been_created[mutexes[i]])
WaitUntilRelease()
CreateMutex();
我尝试将它包装在关键段中,但结果相同。我确信
i
在正确的范围内。
我不能使用Boost / pThreads等。我知道我的问题非常简单,但我找不到解决方法。在我看过的所有示例中,在
WaitForSingleObject
之前创建了互斥体,但这对我不起作用。谢谢。