当前位置: 代码迷 >> 多核软件开发 >> 江湖告急win7线程同步有关问题`
  详细解决方案

江湖告急win7线程同步有关问题`

热度:1725   发布时间:2013-02-26 00:00:00.0
江湖告急!!win7线程同步问题``````
最近程序老出问题,查来查去终于找了罪魁祸首,原来是同步出了问题写了个程序测试了下,不测不知道,一测吓一跳.

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嘛
  相关解决方案