在調試器中,當執行這樣的代碼行時,我「凍結」了:lock (myvar)
顯然其他人持有myvar
。不過,我期望在這條線上myvar
應該是免費的。所以我想知道哪部分代碼holdes myvar
(來自另一個線程diffenetely)。我怎樣才能做到這一點?我知道哪個線程擁有它(因爲我只有另一個線程),但我不知道在哪裏。如何解決問題:爲什麼我無法獲得鎖定?
UPD解決了,我忘了打電話給Monitor.Exit(myvar)
後一個Monitor.TryEnter(myvar)
在調試器中,當執行這樣的代碼行時,我「凍結」了:lock (myvar)
顯然其他人持有myvar
。不過,我期望在這條線上myvar
應該是免費的。所以我想知道哪部分代碼holdes myvar
(來自另一個線程diffenetely)。我怎樣才能做到這一點?我知道哪個線程擁有它(因爲我只有另一個線程),但我不知道在哪裏。如何解決問題:爲什麼我無法獲得鎖定?
UPD解決了,我忘了打電話給Monitor.Exit(myvar)
後一個Monitor.TryEnter(myvar)
如果您正在使用Visual Studio 2010
你可以看一下Parallel Stacks
如何使用它我可以找到線程或地方,「鎖定」我的變量? – javapowered 2012-04-09 11:16:38
你可以看到哪些線程正在運行*現在*可以減少/本地化搜索...與「Monitor.IsEntered」相同,它只會告訴你「Monitor」已經被鎖定,但是誰又是另一個問題...... – Tigran 2012-04-09 12:42:59
究竟有多少鎖語句並您的代碼有? – 2012-04-09 08:16:44
@AndrewBarber我只有一個鎖的聲明,我不明白它如何保持鎖定。所以我想確保在調試器中存在那個問題....我已經決定添加Console.Writeln(「get lock」)和Console.Writeln(「釋放鎖定」)跟蹤... – javapowered 2012-04-09 08:49:03
那些'控制檯。 Writeline()的代價非常昂貴,可能會改變計時。 – 2012-04-09 09:06:09