2011-05-31 70 views
1

我有以下问题。在其中一个库中,我注意到越来越多的事件和信号量句柄。我正在使用的唯一同步原语是CriticalSection。什么可能导致增加不被关闭的手柄?越来越多的信号手柄

操作系统:Windows Server 2003 R2 编译器:微软Visual C++ 2003

+0

使用Processexplorer或handles.exe(以前称为sysinternals.com,当前technet)来诊断句柄的使用情况。 Perfmon可以帮助查看计数,WinDbg用于复杂的案例 – sehe 2011-05-31 12:36:52

+0

可能是您没有删除临界区对象?你可以发布一些代码吗? – Naveen 2011-05-31 12:39:06

+0

如果您在讨论windows API,则完全依赖于'CriticalSection'的定义和用法,然后确保在不再需要句柄时调用DeleteCriticalSection。 – AJG85 2011-05-31 15:45:42

回答

1

虽然不是kernel object,一个关键的部分内部使用其他内核对象,如事件和/或信号(例如参见an article in MSDN Magazine;虽然这是很老那里讨论的结构在Windows的现代版本中可能会有所不同)。正如其他人在评论中指出的那样,如果您通过调用DeleteCriticalSection未正确释放关键部分,则正在使用的句柄数量会增加。