在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的初始化,所以现在在运行时不需要调用这个特定的锁。