在x64
上运行我们的Windows 10
申请时,我们遇到了问题
void WINAPI
EnterCriticalSection (__inout LPCRITICAL_SECTION lpCriticalSection
);
情境:
CRITICAL_SECTION
工作线程使用全局8
对象。
有时,EnterCriticalSection
的调用阻止其中一个工作线程永远,即使关键部分已解锁且免费,如您所见:< / p>
LockCount = -1
RecursionCount = 0
OwningThread = 0x0000000000000000
LockSemaphore = 0xffffffffffffffff
SpinCount = 4000
由于未知原因,该线程不会进入关键部分。
更改SpinCount值无济于事。
EnterCriticalSection ()
与LeaveCriticalSection ()
保持平衡,并且不会在中间删除。
在 Windows 7 上运行相同代码时,此问题不存在。
感谢任何帮助。
更新2015年9月11日: 由于我们仍然没有找到解决此问题的方法(仅在Windows 10上出现)并且结构和算法中的一切看起来都很好,我们找到了一种解决方法:
hack是对软件某些部分进行不同类型的初始化,因此在运行时期间根本不需要调用此特定锁。