关于用Monitor进行同步的问题!!!!!
class Program
{
static int i = 11;
static void Fun()
{
Monitor.Enter(i);
i++;
Thread.Sleep(3000);
i++;
Monitor.Exit(i);
}
static void Main(string[] args)
{
Thread t1 = new Thread(new ThreadStart(Fun));
Thread t2 = new Thread(new ThreadStart(Fun));
t1.Start();
t2.Start();
}
}
为什么报错 :从不同步的代码块中调用了对象同步方法???
我这样为什么不对?
我想让两个现成只有1个能改写i
------解决方案--------------------使用 Monitor 锁定对象(即引用类型)而不是值类型。将值类型变量传递给 Enter 时,它被装箱为对象。如果再次将相同的变量传递给 Enter,则它被装箱为一个单独对象,而且线程不会阻止。Monitor 本应保护的代码未受保护。此外,将变量传递给 Exit 时,也创建了另一个单独对象。因为传递给 Exit 的对象和传递给 Enter 的对象不同,Monitor 将引发 SynchronizationLockException。有关详细信息,请参见概念性主题 监视器。