使变量更新对其他常规例程可见

时间:2016-02-15 03:03:12

标签: go

Golang新手。在我的程序中,返回组例程检查环境并定期更新变量。此变量用于http处理程序方法服务器客户端请求。所以基本上它是一种单值缓存有一个更新程序和许多消费者。

在像Java这样的语言中,只需将此变量设为volatile即可确保所有这些消费者都能看到更新后的值。但由于volatile不是Go中的一个选项,这里推荐的解决方案是什么?

RW锁可以正常工作,但对于这个简单的场景来说似乎有点过头了。

或者这个问题可以通过某种方式通过频道转换为通信?

2 个答案:

答案 0 :(得分:1)

如果Java原子变量满足您在Java应用程序中的需求,请考虑使用Go的atomic memory primitives或更高级sync.Mutex / sync.RWMutex

问题中没有足够的信息来确定应用程序的结构是否可以充分利用渠道。

答案 1 :(得分:1)

我同意@Volker应小心使用原子函数,但是使用atomic.Value这个简单的场景非常简单:

var envVar atomic.Value
envVar.Store("")

...

// in write goroutine:
envVar.Store(os.Getenv("ENVVAR"))

...

// in read goroutine:
v := envVar.Load().(string)