EnterCriticalSection永远阻止

时间:2015-09-08 14:14:07

标签: windows multithreading critical-section

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是对软件某些部分进行不同类型的初始化,因此在运行时期间根本不需要调用此特定锁。

0 个答案:

没有答案