c# 同步进程锁 lock千万别乱用

代码出现dug,定义了一个类型a,有int,string,datetime。List<a> p=new list<a>();
p.add的条件是list里面没有a.string ,有则int加1。


if(p.contains(a))
    p.add(a)
else
    ...
因为我使用的是多线程 list在满足条件下进行add,会在两分钟后被remove掉,所以 我使用了进程锁
刚开始是这样的

if(p.contains(a))
{     lock{ p.add(a);} }
else

     。。。
后来老是出现数据在某个时刻老是重复 而且没有规律可以寻找 在寻找了很久之后发现 重复数据是因为lock的时候没有把if判断的条件带上,两个线程带着同样的数据都过了if的判断条件就出现了上述的结果。
再来一个应用场景,给服务器发送并获得返回值,当出现服务器连接不上或着操作超时的时候要再对服务器进行访问,所以选择让线程休眠2s。
if(ex.contains("操作超时"))
{lock(...thread.sleep(2000);} 结果造成了服务器一秒访问几百条的数据。
总结: lock不能乱用,数据采集的用到多线程的,数据出现重复的 不妨往lock上面找错误


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值