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

lock与Monitor解决办法

2012-01-29 
lock与Monitorinttest0StopwatchswnewStopwatch()sw.Start()for(inti0i10000++i){Monitor.Enter(

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

热点排行