lock关键字使用总结

春节前整理回顾一些知识点,今天要写的是C#中 lock关键字的使用。

lock使用的场合是多线程环境中保证lock的代码段只能被一个线程访问。

1、lock本质:编译后的IL代码就是Monitor.Enter,在finally代码块中Exit 。4.0版本后对lock的退出进行isGetLock判断

2、lock只能锁定引用类型,即使编译器允许锁值类型最终还是会装箱,装箱后内存地址改变了相当于不锁,因此锁值类型是编译不过的。但Monitor.Enter没有做此限制

3、lock对象的选择,lock可以锁字符串、类型和实例对象。

   锁字符串:由于字符串在CLR的驻留机制,若整个程序域中有多个地方同时lock同一个字符串,一旦一个lock进入的时候会导致另外一个lock处于等待状态,是很可怕的事情,因为它的影响范围太大,超出了代码编写者的本意。可见一般不建议lock字符串的道理在此,锁类型也是同样的情况。

  lock对象一般建议为 private readonly object 或private static readonly object,若锁定的范围是限定为本类实例内不给重入则选择实例对象,否则选择静态变量,选择锁this也是一种选择。锁什么对象怎么锁记住一点:被锁对象地址改变锁失效,并灵活运用即可。

转载于:https://www.cnblogs.com/hezhijie/articles/5156866.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值