您是否需要使用互斥锁来锁定 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的关系
我正在用 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的关系