我遇到了一個奇怪的行爲,我的C#應用程序。單線程和無遞歸C#中的奇怪死鎖
我正在通過VS2010以調試模式運行應用程序,幾個小時後應用程序只是等待一個鎖釋放,但唯一活着的線程是等待鎖釋放並且沒有遞歸的該函數:
class ProductionNode {
private readonly object _lock = new object();
public bool Activate(long jobId)
{
lock(_lock) // Doesn't go through here
{
return DAL.InsertJobIfNotExists(jobId)>0; //SQL PLAIN INSERT IF NOT EXIST COMMAND
}
}
public void HasJobs()
{
lock(_lock)
{
return DAL.HasProductionJobs();
}
}
}
同樣,當我暫停使用VS2010使用該ProductionNode唯一線程應用程序是等待被釋放的_lock對象中的一個。
爲了清楚起見,應用程序可能會激活多個線程中的生產節點,但在發生死鎖的給定場景中,VS只顯示使用ProductionNode對象的單個線程,其他線程使用其他對象類型。
有什麼建議嗎?
乾杯, 多倫
瘋狂的猜測,但也許鎖定一個對象,它不能'只讀'? – 2011-04-27 08:05:56
這是代碼中唯一一個獲取該鎖的代碼?這部分代碼對我來說看起來非常好。 – CodesInChaos 2011-04-27 08:07:19
@Dan鎖定不會發生在引用本身上,而是發生在實例上。所以'只讀'應該沒有效果。 – CodesInChaos 2011-04-27 08:08:18