首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于用Monitor进行同步的有关问题!

2012-01-05 
关于用Monitor进行同步的问题!!!!!classProgram{staticinti11staticvoidFun(){Monitor.Enter(i)i++Thr

关于用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。有关详细信息,请参见概念性主题 监视器。

热点排行