多个协程操纵同一个数据2个锁【互斥锁】【读写锁】

golang中sync包实现了两种锁Mutex(互斥锁)和RWMutex(读写锁)
【1】互斥锁(和上厕所一样,用的时候把门锁上,不用的时候把门给关上)
其中Mutex为互斥锁,Lock()加锁,Unlock()解锁,使用Lock()加锁后,便不能再对其进行加锁,直到利用Unlock()解锁对其解锁后,才能再次加锁,适用于读写不确定场景,即读写次数没有明显的区别
----性能、效率都相对来说比较低

【2】读写锁
RWMutex是一个读写锁,其经常用于读次数远远多于写次数的场景
----在读的时候,数据之间不产生影响,写和读之间才会产生影响
 

不加锁的情况下并发执行

结果:在理论上,这个totalNum结果应该是0,无论协程怎么交替执行,最终想象的结果就是0
但是事实上:不是

问题出现的原因:(图解为其中一种可能得原因)

 解决问题:
有一个机制:确保:一个协程在执行逻辑的时候,另外的协程不执行  ---》锁的机制---》加入互斥锁

互斥锁

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值