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



我想我错过了一些关于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后是否被锁定?请给我一些新的眼光。

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

另请记住 (MSDN):

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

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

相关内容

最新更新