首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

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

2012-03-11 
江湖告急!!win7线程同步问题``````最近程序老出问题,查来查去终于找了罪魁祸首,原来是同步出了问题写了个

江湖告急!!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嘛

热点排行