首页 > 解决方案 > Go 会改变单个 goroutine 中两个互斥锁的执行顺序吗?

问题描述

如果我有两个受互斥锁保护的资源,为了避免死锁,我应该按一定的顺序锁定它们。Go 没有 volatile 关键字。那么编译器会改变这两个锁操作之间的执行顺序吗?

标签: goconcurrencycompiler-optimization

解决方案


看一下 Go 内存模型:

https://golang.org/ref/mem

特别是:互斥锁可用于建立发生前的关系。如果您先锁定一个互斥锁,则所有 goroutine 将按该顺序观察这些操作。


推荐阅读