lock与monitor的区别

1、Lock 只能对引用对象加锁

     Lock锁定区间内可以对锁定值修改而不发生运行时错误,通常也会采用此种修改方式。这种方式又有点类同于使用Monitor.Wait取得资源,并对这个资源进行操作。

    用法: 

         private static readonly object locktask= new object();

         pulick void lock()

         {

            lock(locktask)

             {

             dosomething();

              }

          }

         

2、Monitor 可以对值类型加锁,实际上是在调用Monitor.Enter时对值类型装箱了

      Monitor在锁定区域内不能对被锁对象的值进行修改,运行时抱错“从不同步的代码块中调用了对象同步方法”

   

        private static readonly object locktask= new object();

        

pulick void lock()

         {

               try

              {

            Monitor.Enter(locktask)

             dosomething();

             }

           catch

           {}

          finnally

           {

           Monitor.Exit(Tasklock);

           }

              }

          }

原文地址:https://www.cnblogs.com/MissQing/p/6165845.html