即使在Monitor.Enter之后,Monitor.TryEnter也始终返回true
我想我错过了关于Monitor.Enter
和Monitor.TryEnter
正确行为的一些信息。 这是我编写的一段代码,用于将问题与其余代码分开:
object lockObj = new object(); bool result = Monitor.TryEnter(lockObj); Console.Write(result);
结果总是true
。 这里没有惊喜。
object lockObj = new object(); Monitor.Enter(lockObj); bool result = Monitor.TryEnter(lockObj); Console.Write(result);
但这一次也是true
。 那么在Monitor.Enter
之后lockObj
锁定了lockObj
? 请给我一些新的看法。
这是因为你在同一个线程中这样做。
还要记住( MSDN ):
如果没有阻塞,同一个线程不止一次调用Enter是合法的; 但是,在等待对象的其他线程将解除阻塞之前,必须调用相同数量的Exit调用
已经获得监视器的同一个线程总是允许重新获取它(以允许重新进入的代码)。