采用临界区X,在线程A与B中使用,默认B很少使用X,程序运行正常,但是在某个条件下,我让B频繁使用临界区X后,就发生了死锁。我在每次EnterCriticalSection()与 LeaveCriticalSection 或TryEnterCriticalSection()后都会TRACE()操作成功与否的信息,发现A线程锁定后又离开了X,它再尝试进入X时就进不去了,而信息中没有显示B在使用,看了下X中的RecursionCount为1,确实是被锁住了,但是不知道怎么锁住,被哪个线程锁住。至于那个B线程,它在尝试进入X时也是失败。大家有没有遇到过这种情况呢?
顺便说依稀,是不是中间有什么判断,跳出了函数,导致没有执行LeaveCriticalSection?
{
EnterCriticalSection; if(x){
// LeaveCriticalSection; 一般很容易有人在这里出bug.忘了离开临界区.导致死锁..仔细检查代码
return 1;
} LeaveCriticalSection;
}