【问题标题】:Monitor.TryEnter always returns true even just after Monitor.EnterMonitor.TryEnter 总是在 Monitor.Enter 之后返回 true
【发布时间】:2012-06-22 10:23:38
【问题描述】:

我想我错过了 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。那么lockObjMonitor.Enter 之后是否被锁定?请给我一些新的看法。

【问题讨论】:

    标签: c# .net multithreading synchronization


    【解决方案1】:

    这是因为您在同一个线程中执行此操作。

    还要记住 (MSDN):

    同一个线程多次调用 Enter 是合法的 没有它的阻塞;但是,必须有相同数量的退出调用 在等待对象的其他线程解除阻塞之前调用

    【讨论】:

    • 你是对的。我认为Monitor.TryEnterdocumentation 应该更明确一点。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-06
      • 2017-05-10
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多