我們有一個C#服務開始以非常奇怪的方式圍繞線程句柄失敗。特別是對EventWaitHandle.Reset,ReaderWriterLock調用和其他類似線程調用的調用隨機堆放在深處的Invalid Handle錯誤中。這些電話肯定是應該工作的。這可能是內存腐敗的跡象嗎?如果是這樣,我們有點困惑這是唯一的症狀,而不是崩潰。我們使用C++代碼來處理HeapFree的COM對象,並且還有一些託管代碼調用FreeHGlobal,因此可疑。有沒有人遇到類似這樣的問題,表現爲看似本地化爲線程原語的問題?C#中的無效線程句柄可能是非託管內存損壞的標誌嗎?
0
A
回答
0
原來這是一個PInvoke問題。我們錯誤地將一個線程句柄調用到C#的SafeFileHandle包裝器,它在寫入條件下會使線程句柄失效,後來由其他線程重新分配線程句柄並導致巨大的混亂。這是故事的寓意,要非常小心使用.net在P-Invoke中處理包裝類。
1
我還沒有看到這個特殊的症狀。但我認爲可以想象,原因正如您所懷疑的 - 沒有規定說內存損壞必然會導致崩潰。
試想一下,你有一個數據結構,這樣
buffer[100];
threadHandle;
你在代碼中有一個簡單的了一個錯誤填充緩衝區。現在你的線程處理有缺陷,大概你會得到你看到的症狀。
我不太瞭解你的環境(我是Linux/Java這幾天),但可能另一個原因是線程終止後使用threadHandle?那麼句柄確實不再有效?您的終止代碼中存在某種競爭條件?
相關問題
- 1. 將非託管數組傳遞給託管線程。 - 內存損壞
- 2. 內存損壞可能是由無效*讀取*釋放的內存引起的?
- 3. 線程中的句柄錯誤無效
- 4. GetFileSizeEx損壞文件句柄
- 5. 託管C#中的自由非託管C代碼內存
- 6. 獲取隨機SIGTRAP信號(在MinGW-gdb中)是內存損壞的標誌嗎?
- 7. WskSocketConnect - 可能的內存損壞問題?
- 8. 內存管理,堆損壞和C++
- 9. 將C#窗口句柄傳遞給非託管代碼 - 跨線程異常
- 10. 損壞的句柄模板,帶有emberjs
- 11. C#中的結構修改會影響非託管內存嗎?
- 12. 在c#中分配「非託管」內存
- 13. 非託管內存和託管存儲
- 14. D中的非託管內存管理
- 15. 給託管控制句柄非託管代碼 - 訪問衝突
- 16. 內存位置無效的訪問 - 託管到非託管代碼
- 17. 內存損壞在C
- 18. C#損壞內存錯誤
- 19. C++ malloc():內存損壞
- 20. 堆損壞,可能的內存泄漏,C++
- 21. 文件句柄和XML ::簡單 - >內存損壞。不能隔離問題
- 22. python中的內存損壞
- 23. f90中的內存損壞
- 24. c#WinForm應用程序中的許多非託管內存
- 25. NSMutableArray的奇怪問題 - 可能是一些內存損壞
- 26. 內存損壞
- 27. 「分析器圖」中的「非託管內存」。這是內存泄漏指示嗎?
- 28. 託管環境中的多線程Pinvoked DLL。可能嗎?
- 29. esp8266程序內存損壞
- 30. 轉換結構手柄從託管到非託管C++/CLI
你有一個很小但完整的代碼示例能夠重現問題嗎? – 2010-08-02 05:26:56