线程1
...
SetEvent(_event)
;
EnterCriticalSection(crit);
ResetEvent(_event);
LeaveCriticalSection(crit);
主题2:
EnterCriticalSection(crit);
WaitForSingleObject(_event, forever);
LeaveCriticalSection(crit);
当线程1设置事件时,线程2仍在等待并永远等待。所以,Thead 1试图获得锁定,但未能陷入僵局。我检查SetEvent的返回值是否正常。
我删除了线程1的EnterCriticalSection和LeaveCriticalSection,并发现在多次调用SetEvent后仍未设置该事件
答案 0 :(得分:4)
没有理由用临界区包装事件。该事件本身提供了足够的线程同步,因此完全摆脱了关键部分。
线程1
SetEvent(_event); // Or PulseEvent(), depending on the nature of the event
主题2:
WaitForSingleObject(_event, forever);
这就是你所需要的一切。