EnterCriticalSection块永远

Windows 10上运行我们的x64应用程序时,我们遇到了void WINAPI EnterCriticalSection__inout LPCRITICAL_SECTION lpCriticalSection )的问题;

场景:

全局CRITICAL_SECTION对象由8工作线程使用。

有时候, EnterCriticalSection的调用将永远 阻塞其中一个工作线程,即使临界区被解锁并释放,您可以在这里看到:

  • LockCount = -1

  • RecursionCount = 0

  • OwningThread = 0x0000000000000000

  • LockSemaphore = 0xffffffffffffffff

  • SpinCount = 4000

由于未知原因,该线程不会运行到关键部分。

更改SpinCount值无济于事。

EnterCriticalSection ()LeaveCriticalSection ()平衡,并且不会在两者之间被删除。

Windows 7上运行相同的代码时,此问题不存在

任何帮助表示赞赏。

更新09/11/2015:因为我们还没有find解决这个问题的办法(只出现在Windows 10上),而且在结构和algorithm上都看起来不错,我们发现了一个解决方法:

破解是软件某些部分的一种不同types的初始化,所以现在在运行时不需要调用这个特定的锁。