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

时间:2012-06-22 10:23:38

标签: c# .net multithreading synchronization

我认为我遗漏了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。那么lockObj之后Monitor.Enter被锁定了吗?请给我一些新的看法。

2 个答案:

答案 0 :(得分:7)

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

另请注意(MSDN):

  

同一个线程多次调用Enter是合法的   没有阻挡;但是,必须有相同数量的Exit调用   在等待对象的其他线程取消阻止之前调用

答案 1 :(得分:0)

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