使变量更新对其他 go-routines 可见

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

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

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

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


四季花海
浏览 166回答 2
2回答

隔江千里

即应该谨慎使用原子函数,但是对于这个使用atomic.Value 的简单场景,它是相当简单的:var envVar atomic.ValueenvVar.Store("")...// in write goroutine:envVar.Store(os.Getenv("ENVVAR"))...// in read goroutine:v := envVar.Load().(string)

慕雪6442864

如果 Java 原子变量可以满足您在 Java 应用程序中的需求,那么可以考虑使用 Go 的原子内存原语或更高级别的sync.Mutex / sync.RWMutex。问题中没有足够的信息来了解应用程序是否可以构建以充分利用渠道。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go