专栏首页Golang语言社区Go语言锁的解读

Go语言锁的解读

var l sync.Mutexvar a stringfunc f() {
	a = "hello, world"
	l.Unlock()
}func main() {
	l.Lock()	go f()
	l.Lock()	print(a)
}

sync 包中实现了两个关于锁的数据类型,sync.Mutex 和 sync.RWMutex。[ 互斥锁 mutex 是独占型,只能 lock 一次, unlock 一次,然后才能继续 lock 否则阻塞。 读写互斥锁 reader-writer mutex 是所有的 reader 共享一把锁或是一个 writer 独占一个锁, 如果一个 reader lock 到锁了, 其他的 reader 还可以 lock 但是 writer 不能 lock 。 ]

对于 sync.Mutex 或是 sync.RWMutex 类型的变量 mutex 来说,假定 n < m,对于 mutex.Unlock() 的第 n 次调用在 mutex.Lock() 的第 m 次调用返回之前发生。[ 对于一个 mutex 来说,lock 一下,第二次 lock 会阻塞,只有 unlock 一下才可以继续 lock,就是这个意思。然而 unlock 一个没有 lock 的 mutex 会怎么样呢?error ! ]

其实关键的就一点

每一次lock 之后是为了等待unclock的返回值,那么怎么确保unlock操作的之前的值返回呢,go种定义了 每一次lock 必须是在上一次unlock之后才会发生。所以这个程序是这么解读的:

1.调用一次lock
2.gorou里面对a赋值,进行写操作,此时unlock操作与写操作在同一个“线程”里面,并且unlock在写之后。
3.调用l.lock()确保,此时必须的等到unlock完成。即lock发生在UNclock之后,更发生在赋值之后
4.第二个lock发生在print之前,所以你懂得。

本文分享自微信公众号 - Golang语言社区(Golangweb)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-09-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Golang协程与通道整理

    协程goroutine 不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现 涉及系统调用的地方由Go标准库...

    李海彬
  • Golang协程与通道整理

    协程goroutine 不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现 涉及系统调用的地方由Go标准库...

    李海彬
  • linux 内核同步机制使用

    Linux 内核中的同步机制:原子操作、信号量、读写信号量、自旋锁的API、大内核锁、读写锁、大读者锁、RCU和顺序锁。 1、介绍 在现代操作系统里,同一时间...

    李海彬
  • C++核心准则CP.21:使用std::lock()或者std::scoped_lock获取多个mutex

    Here, the writers of thread1 and thread2 are still not agreeing on the order of ...

    面向对象思考
  • MySql 锁等待该如何处理?

    这个问题我相信大家对它并不陌生,但是有很多人对它产生的原因以及处理吃的不是特别透,很多情况都是交给DBA去定位和处理问题,接下来我们就针对这个问题来展开讨论。

    趣学程序
  • cocos2d

    cocos studio(支持c++和lua不需要插件)的替代品,electron架构编写的编辑器,支持react、vue等

    sofu456
  • 基因型填充前的质控条件简介

    影响基因型填充准确率的因素有很多,比如分型结果的质量,填充软件的选择,reference panel的选择,样本量的大小, SNP的密度等等。

    生信修炼手册
  • 哪里的云服务好,选择腾讯云的理由(价格优惠实用)

    现在的云服务器种类众多,配置参数项目也比较多。新用户在选择云服务器哪家好时,会想着云服务器哪家好?对于要购买云服务器的用户来说,面对众多的商家品牌,很难确定到底...

    勤劳的小蜜蜂
  • 一文搞懂简单线性回归

    线性回归是研究因变量y和自变量x之间数量上相互依存的线性关系。在机器学习中自变量x为样本特征,因变量y为目标值。比如在预测房价的机器学习任务中,每个样本x表示与...

    触摸壹缕阳光
  • Access重复项查询

    大家好上节介绍了汇总查询,继续介绍选择查询中的重复项查询和不匹配项查询,这两种查询都可以在查询向导中创建,本节主要介绍重复项查询。

    无言之月

扫码关注云+社区

领取腾讯云代金券