2011-05-31 60 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未正確釋放關鍵部分,則正在使用的句柄數量會增加。