如何解决问题:为什么我无法获得锁定?
在调试器中,当执行这样的代码行时,我“冻结”了: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