最近程序老出问题,查来查去终于找了罪魁祸首,原来是同步出了问题写了个程序测试了下,不测不知道,一测吓一跳.
CRITICAL_SECTION CriticalSection;
int _tmain(int argc, _TCHAR* argv[])
{
InitializeCriticalSection(&CriticalSection);
EnterCriticalSection(&CriticalSection);
MessageBox(0,"进入临界区","enter",MB_OK);
//LeaveCriticalSection(&CriticalSection);
EnterCriticalSection(&CriticalSection);
MessageBox(0,"我不会弹出...不会的,不会的....不可能的...","不可思议",MB_OK);
DeleteCriticalSection(&CriticalSection);
return 0;
}
调用EnterCriticalSection后我并没有leave,又再次调用EnterCriticalSection,
这样应该死锁才对,怎么程序就直接执行下去了,弹出了第2个messagebox,并没有在那里等待.以前一直好好的,直到最近程序出现问题,才找到这问题,以前都是能锁住的,现在怎么没用了.
平台 vs2010+Win7
------解决方案--------------------------------------------------------
这个跟Win7无关,临界区只是实现线程互斥的,占有了临界区的线程可以多次进入临界区,有计数的,不会卡住的,但是也需要调用同样多次的LeaveCriticalSetion,否则其他线程进不了
------解决方案--------------------------------------------------------
你想让他怎么卡住?
让你调用CreateThread的线程卡住,然后用CreateThread出来的那个线程解锁?
用Event嘛