你有没有必要用互斥锁锁定const?

时间:2018-05-30 11:40:13

标签: go concurrency locking constants mutex

我正在编程并使用互斥锁来锁定某些变量,以便在读取时不会被覆盖。

这让我思考。因为你可以多次读取变量。是否有必要锁定常量变量的情况?

2 个答案:

答案 0 :(得分:6)

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

如果我们谈论constants,那么就没有变量,你不能获取常量的地址(详见Find address of constant in go),因此无法修改常量值。

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

答案 1 :(得分:0)

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

但是如果你把const视为变量,一旦赋值给它的值就不能改变,那么你应该小心因为golang内存模型和happens before关系。