Critical section的一个缺点是,没有办法获知进入critical section中的那个线程是生是死。从另一个角度看,由于critical section不是核心对象,如果进入critical section的那个线程结束了或当掉了,而没有调用LeaveCriticalSection()的话,会发生什么情况?
Jeffrey Richter 在他所主持的 Win32 Q&A 专栏(Microsoft Systems Journal,1996/07)中曾经提到过,Windows NT 和 Windows 95 在管理dangling critical sections 时有极大的不同。在 Windows NT 之中,如果一个线程进入某个 critical section 而在未离开的情况下就结束,该 critical section 会被永远锁住。然而在 Windows 95 中,如果发生同样的事情,其他等着要进入该 critical section 的线程,将获准进入。
那WinXP,Win7是怎么处理这个情况的呢?

解决方案 »

  1.   

    在 Windows NT 之中,如果一个线程进入某个 critical section 而在未离开的情况下就结束,该 critical section 会被永远锁住。
    -------------------
    WinXP,Win7就这种情况吧
      

  2.   

    进入了没有leave(线程还在干活,或者没有处理好,一直没退出),其他线程就一直等待啊,这样不是很符合这个设计的逻辑嘛.
      

  3.   

    进入了没有leave(线程还在干活,或者没有处理好,一直没退出),其他线程就一直等待啊,这样不是很符合这个设计的逻辑嘛.
      

  4.   


    大侠没仔细看问题哦。我是说如果某个线程enter了,但还没有leave的情况下,因为某种原因,这个线程结束了。所以它永远都没办法leave了。这个时候,系统如果处理这个critical section。回头找个时间还是自己用程序测试下吧。呵呵,本来想不劳而获,直接等大家告诉我一下就得了。
      

  5.   

    csdn是什么情况?刷新一下,看不到5、6楼了,再刷新一下,5、6楼出来了,9、10楼没了。
    ... ...
      

  6.   

    看了
    Critical Section Objects 

    也没提到楼主所说的问题。
    不过个人认为,如果你线程结束了,占用的资源确实该自动释放,死锁资源不是个优秀的操作系统的表现。你说对么?
      

  7.   

        你写个线程,enter后在leave前return试试看吧。
        其实我认为这个问题没什么值得关注的,只要不使用强制结束线程的函数,并且在用到enter的每个函数中,每个函数结束分枝都匹配leave就行了。