我想我错过了一些关于Monitor.Enter
和Monitor.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 是合法的 没有它阻塞;但是,必须具有相同数量的退出呼叫 在等待对象的其他线程取消阻止之前调用
已经获取监视器的同一线程始终允许重新获取它(以允许重新输入代码)。