我在我的代碼中的鎖關鍵字。它凍結,因爲別的東西被鎖定。有什麼樣的命令或實用程序可以用來查看誰或什麼?誰鎖定我的東西在C#中使用鎖關鍵字
回答
您可以連接到使用WinDbg的過程,並使用sosex.dll看到與DLK命令僵持不下什麼的線程虛擬對象。
使用Visual Studio更容易附加並轉儲線程調用堆棧。 –
@Steve如果它發生在你的桌面上,並且線程數很少。有時在用戶計算機上甚至從內存轉儲中運行windbg更容易 –
同意,IDE並不總是可行的 - 儘管如此,使用IDE(或Windbg)的遠程連接也是可能的。 –
如果您正在使用鎖定,那麼您應該在您控制的對象上使用它。通常,這是隻用於你的鎖即
Object lockObj = new Object();
//some code
void MyCoolFunc()
{
lock(lockObj)
{
//do some not threadsafe stuff
}
}
不幸的是,沒有簡單的答案...但你可以使用的工具,如CHESS來幫助你前進的道路。最終,您可能必須檢查您的代碼是否存在可能導致死鎖的競爭條件。任何看到鎖定語句或其他線程同步對象(例如監視器,互斥鎖等)的地方,您都需要檢查它們以查看鎖定的內容並找到鎖定同一事物的其他代碼段
我認爲您可以使用VS.NET附加到掛起的進程並單擊暫停。然後調用線程窗口(調試 - > Windows - >線程)並檢查哪些線程被鎖定以及爲什麼。這看起來是最簡單的解決方案。
- 1. 我真的鎖定了這個東西
- 2. C#鎖關鍵字的用法
- 3. 鎖(objectReference){}沒有鎖定關鍵部分
- 4. C++ OpenMP關鍵:「單向」鎖定?
- 5. 鎖定在字符串鍵
- 6. 使用鎖定()C#
- 7. Python鎖定關鍵部分
- 8. WCF服務,並鎖定關鍵字
- 9. 線程競賽和鎖定關鍵字
- 10. C#鎖定或不鎖定
- 11. 只使用關鍵部分的讀/寫鎖會導致死鎖
- 12. 使用Mutex鎖定/解鎖並在C中廣播pthreads
- 13. 在Ubuntu中使用C API鎖定和解鎖文件LInux
- 14. 用pthread mutex鎖定關鍵區域?
- 15. 使用volatile關鍵字和鎖定語句
- 16. 使用C#鎖定文件#
- 17. java中的Redis鎖定鍵
- 18. 我如何開啓/關閉大寫鎖定,滾動鎖定,Num Lock鍵編程
- 19. 使用鎖定數組的鎖定元素C++
- 20. 用Obj-C鎖定
- 21. 在C中鎖定線程#
- 22. 鎖定在ADO.NET中的表鎖定
- 23. C#靜態字段鎖定
- 24. 我可以在關鍵鎖之外使用pthread信號嗎
- 25. C++腳本在使用「LockWorkStation()」鎖定後「解鎖」窗口
- 26. 鎖定緩存鍵
- 27. 知道是誰鎖定的對象
- 28. 用JavaScript鎖定tab鍵?
- 29. 基於頂級s表達式的字體鎖定關鍵字
- 30. 什麼傳遞給鎖關鍵字?
請解釋你正在鎖定什麼。一個類型,一個私人對象,一個公共對象,一個靜態字段? (通過顯示相關代碼進行最佳解釋。) –