c++ - 有什么方法可以让 Enter/LeaveCriticalSection 留下句柄

标签 c++ multithreading windows-xp

我的程序中有以下代码:

  EnterCriticalSection(&critsec[x]);
  // stuff
  LeaveCriticalSection(&critsec[x]);

它在 99.999% 的时间里工作正常,但偶尔似乎会遗漏一个句柄。现在我已经做了一些显而易见的事情,比如确保 x 在输入之间没有改变值,并确保“//stuff”中没有任何“return”或“break”,但我想知道是否有什么东西否则会导致输入/离开对留下句柄。可能内存不足或溢出操作系统中的某些计数器或其他任何东西。

编辑:我是 C++ 的新手,该程序最近才从 C 转换而来。整个程序的任何地方都没有异常。

最佳答案

如果您没有显式删除临界区,并且临界区上曾经存在争用,您将泄漏句柄。当两个或多个线程在尝试进入单个关键部分时发生重叠时,Windows 上关键部分的一些实现会分配一个信号量。

这不是泄漏。或者更确切地说,如果“泄漏”句柄的数量小于或等于您正在使用的全局关键部分的数量,则它不是泄漏。

关于c++ - 有什么方法可以让 Enter/LeaveCriticalSection 留下句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763322/

相关文章:

c++ - 在没有循环的情况下在opencv::Mat中创建一个矩形零

c++ - C++ 中的 QNX 面向对象线程

c# - 锁定自加载缓存

windows - 在 HKLM 下创建 key

c# - PrincipalContext.ValidateCredentials 在 XP 上始终使用 Machine ContextType 返回 False

c++ - 在迭代 std::list 时删除

c++ - c++ 中数据类型的动态更改?

c++ - 在 C 中使用无效指针值是否合法?

在单独的线程上运行的android服务

windows-xp - Windows XP 上 Wiimote(Wii Remote)的 Java API