您是否需要使用互斥锁来锁定 const?

Would you ever have to lock const with a mutex lock?

我正在用 go 编程并使用互斥锁来锁定某些变量,这样它们在读取时就不会被覆盖。

这让我开始思考。因为你可以多次读取一个变量。是否存在必须锁定常量变量的情况?

规则很简单:如果多个goroutine同时访问一个variable,并且至少有一个访问是写,那么就需要同步。

如果我们谈论constants, then there is no variable, and you cannot take the address of a constant (for details, see ),那么修改常量值是不可能的。

您不需要任何同步来访问来自多个 goroutine 的常量。

如果您谈论常量,则无需使用同步例程来访问它们(正如@icza 建议的那样)。

但是如果你把const当做赋值后不能改变的变量,那你就要小心了,因为golang的内存模型和happens before的关系