在以下代码示例中:
class Program
{
private static int counter = 0;
public static object lockRef = new object();
static void Main(string[] args)
{
var th = new Thread(new ThreadStart(() => {
Thread.Sleep(1000);
while (true)
{
Monitor.Enter(Program.lockRef);
++Program.counter;
Monitor.Exit(Program.lockRef);
}
}));
th.Start();
while (true)
{
Monitor.Enter(Program.lockRef);
if (Program.counter != 100)
{
Console.WriteLine(Program.counter);
}
else
{
break;
}
Monitor.Exit(Program.lockRef);
}
Console.Read();
}
}
为什么即使我在 Monitor 中使用 lock,Main 函数中的 while 循环也不会中断?如果我在 Thread 中添加 Thread.Sleep(1) 而一切都按预期工作,即使没有 Monitor...</p>
Monitor 类没有足够的时间来锁定是不是发生得太快了?
注意: != 运算符是有意的。我知道我可以将其设置为 < 并解决问题。我试图实现的是看到它与 Monitor 类一起工作,而没有它就无法工作。不幸的是,这两种方式都不起作用。谢谢