多线程中lock的应用

          看了很多关于c#中lock使用的说明,但是感觉都没有说到点上。

         最近做了一个应用,吃了一些苦头才把lock搞明白,关于lock的定义我就不多说了,这次主要说说lock在多线程中的应用及实际应用过程中遇到的问题。

         多个线程访问同一个变量的时候就会用到lock,但是如何应用lock呢,lock对象需要object类型的,并且是static的,否则,多个线程会创建多个lockObject,就失去了lock的意义了(实际应用过程中没有加static,会导致计算不准确,而且还是一会准确,一会不准确,很是头疼,找不出错误的原因)。

         再一个就是线程处理的过程中有多个地方用到lock的时候是用一个lockObject还是用多个,答案是多个,因为你只用一个,会影响其他有lock代码段的执行。

          再一个容易出错的地方就是lock写到代码段的内部还是全局的,答案是全局的,如果写到代码段的内部,也不会报错,但是效果就是相当于没有加锁,因为各自线程还会执行代码段时创建lockObject对象再加锁,相当于只是在本线程之内使用,无意义。

          有的实例用lock(this),实际上效果是一样的,相当于一个静态object对象,因为ths只有一个,而且是object型的。

          如果对lock还是不太明白,推荐大家看看王涛的一本书,《你必须知道的.net》,好像是这个书名,这本书里面对lock的分析还是不错的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值