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

rot*_*man 3 .net c# multithreading synchronization

我想我失去了一些东西有关的正确行为Monitor.EnterMonitor.TryEnter.这是我编写的一段代码,用于将问题与其余代码分开:

object lockObj = new object();
bool result = Monitor.TryEnter(lockObj);
Console.Write(result);
Run Code Online (Sandbox Code Playgroud)

结果总是如此true.这里没有惊喜.

object lockObj = new object();
Monitor.Enter(lockObj);
bool result = Monitor.TryEnter(lockObj);
Console.Write(result);
Run Code Online (Sandbox Code Playgroud)

但这次也是true.所以是否lockObj被锁定Monitor.Enter?请给我一些新的看法.

sll*_*sll 7

这是因为你在同一个线程中这样做.

还要记住(MSDN):

如果没有阻塞,同一个线程不止一次调用Enter是合法的; 但是,在等待对象的其他线程将解除阻塞之前,必须调用相同数量的Exit调用

  • 你是对的.我认为`Monitor.TryEnter`的[文档](http://msdn.microsoft.com/en-us/library/4tssbxcw)应该更明确一点. (3认同)