Golang 源代码解析(一) 锁机制的研究

前序

       在并发编程,尤其是Golang中多协程编程中,数据的一致性和安全性是一个必须要解决的难度。这里面最重要的是通过锁机制来解决这些问题,锁包括CAS,互斥锁,消息队列,分布式锁来解决。但是对于锁的底层实现,知之甚少,这里就是来探讨锁机制的底层实现。

一.锁的场景实例

       我们在使用Golang的过程中,经常会使用到并发处理问题的情况。在网络编程中处理消息,或者在应用层面通过并发处理提高解决问题的能力,并行处理多个任务。但是在实际使用中,并发处理有很多问题。

      全局共享数据的问题,我们可以看以下示例:

     

这是很典型的数据冲突的问题。因为两个协程并发执行,并不能保证num的一致性,导致结果如下:

预期值:20000 实际结果: 不确定

简单理解如下

由此可见 数据一致性出现了问题 解决方式如下

输出结果为:

通过锁让协程并发执行,解决数据一致性的问题

另外一个问题:

代码中可以看到,我们对map进行的同时读写操作

运行结果如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值