Go会在一个goroutine中更改两个互斥锁的执行顺序吗?

问题描述

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

解决方法

看看Go内存模型:

https://golang.org/ref/mem

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