lock关键字用法

在.net中线程同步有一下几种方式:

1.lock语句

2.监视器

3.同步事件和等待句柄

4.Mutex对象

 

lock语句用于给对象获取互斥锁,执行操作语句,然后再释放该锁。在线程同步时,lock关键字将语句块标记为临界区,能保证代码顺利执行而不被其他线程中断,变量被包装在独占锁中。其他线程只能等待执行解锁之后才能访问改对象。如下

public static void Mian()

{

object o = new object();

lock(o)

{

      //执行线程同步相关操作

}

}

 

其实上面的代买等价于:

public static void Mian()

{

object o = new object();

System.Threading.Monitor.Enter(o);

try

{

      //执行线程同步相关操作

}

finally

{

      system.Threading.Monitor.Exit(o);

        }

}

 

lock 的规则:

1.lock的对象必须是引用类型参数。

2.避免锁定公共对象或不受应用程序控制的对象实例,最好是定义private对象来锁定。

3.String类型对象对多线程操作是安全的,因此不建议锁定字符串类型对象。

4.避免死锁。让两个线程以相同的枷锁顺序锁定对象,是避免死锁的有效手段。

5.Monitor类还提供了一个TryEnter的方法,使用更加灵活。可以有效的解决死锁的发生。

6.线程同步最好之应用在需要的时候,因为锁定对象对系统性能存在影响。一方面是枷锁与解锁的系统开销,另一方面可能导致其他线程因为等对释放对象而暂停执行。

posted @ 2008-11-23 22:30  herobeast  阅读(450)  评论(0编辑  收藏  举报