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

转载于:https://www.cnblogs.com/HeroBeast/archive/2008/11/23/1339575.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值