lock与Monitor
int test = 0;
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 10000; ++i)
{
Monitor.Enter(test);
try
{
test = i;
}
finally
{
Monitor.Exit(test);
}
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
这段代码进行到finally里会抛出异常,而如果用lock代替Monitor来锁的话却不会有异常出现,这是什么原因呢?
------解决方案--------------------楼主,以后先去看看MSDN
这次我帮你摘一段:
使用 Monitor 锁定对象(即引用类型)而不是值类型。将值类型变量传递给 Enter 时,它被装箱为对象。如果再次将相同的变量传递给 Enter,则它被装箱为一个单独对象,而且线程不会阻止。Monitor 本应保护的代码未受保护。此外,将变量传递给 Exit 时,也创建了另一个单独对象。因为传递给 Exit 的对象和传递给 Enter 的对象不同,Monitor 将引发 SynchronizationLockException。有关详细信息,请参见概念性主题 监视器。