使用Windbg跟踪一个最简单的死锁,发现有同步Event对象。然后跟踪EnterCriticalSection竟然发现有CreateEvent和ZwWaitForSingleObject的调用(如果使用spinlock可以避免)。
这点好像和Jeffiery 的Advance Windows Programming有点出入。

解决方案 »

  1.   

    不会吧EnterCriticalSection最大的好处就是不使用核心对象,因而速度比Mutex及Event块100倍,但是,也是因为同样的原因它不能用在进程的同步上,而且他的等待时间没法控制,如果是你说的那样他就没有任何优势可言了,也就没有存在的意义了.
      

  2.   

    CriticalSection的效率是主要是使用了SpinLock的方式。这个我是在内核调试的时候发现的,我做了两个死锁的线程,但是发现内核中竟然是两个线程在等待同步事件,然后我跟踪了一下用户态的代码,发现
    只有在使用InitializeCriticalSectionAndSpinLock设置了此CRITICAL_SECTION中spinlock的值才会使用spinlock,而且当两个线程以上同时访问这个结构的时候系统也会使用EVENT的。