摘要
如果多个线程同时等待同一个事件句柄,如:
WaitForSingleObject(theHandle, INFINITE);
并将事件初始化为手动重置,如:
// manual-reset and initial-state set to true
theHandle = CreateEvent(nullptr, true, true, nullptr);
然后一旦设置了事件,所有线程都会恢复吗?
更详细一点
这个例子似乎表明他们都会恢复,而不是实际出来并说出任何一种方式:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686915(v=vs.85).aspx
在我的特定情况下,我有一小段代码,手动重置事件,并再次设置简短的顺序。即:
ResetEvent(theHandle)
// Do some things that should not lock at all let alone deadlock
SetEvent(theHandle)
然后在实践中我发现一些等待事件设置的调用将无限期地等待:
WaitForSingleObject(theHandle, INFINITE); // Hello, deadlock
我能想到的唯一事情就是事件不按照我认为他们应该的方式工作,因此问题,或者我的安全,无锁和#34;上面提到的代码实际上并非如此安全和无锁。
答案 0 :(得分:1)
设置了手动重置事件,所有等待的对象都将恢复。这在SetEvent的MSDN页面上有明确说明。