即使在Monitor.Enter之后,Monitor.TryEnter也始终返回true

我想我错过了关于Monitor.EnterMonitor.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调用

已经获得监视器的同一个线程总是允许重新获取它(以允许重新进入的代码)。