golang中sync包实现了两种锁Mutex(互斥锁)和RWMutex(读写锁)
【1】互斥锁(和上厕所一样,用的时候把门锁上,不用的时候把门给关上)
其中Mutex为互斥锁,Lock()加锁,Unlock()解锁,使用Lock()加锁后,便不能再对其进行加锁,直到利用Unlock()解锁对其解锁后,才能再次加锁,适用于读写不确定场景,即读写次数没有明显的区别
----性能、效率都相对来说比较低
【2】读写锁
RWMutex是一个读写锁,其经常用于读次数远远多于写次数的场景
----在读的时候,数据之间不产生影响,写和读之间才会产生影响
不加锁的情况下并发执行

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

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

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

最低0.47元/天 解锁文章
430

被折叠的 条评论
为什么被折叠?



