3

我想我错过了一些关于 and 的正确行为的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还是不锁定?请给我一些新的看法。

4

2 回答 2

7

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

还要记住(MSDN):

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

于 2012-06-22T10:26:32.023 回答
0

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

于 2012-06-22T10:27:15.720 回答