为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
四季花海 2021-12-13 18:24:55
Golang 新手。在我的程序中,一个后台组 go-routine 检查环境并定期更新一个变量。此变量用于 http 处理程序方法服务器客户端请求。所以基本上它是一种单值缓存,有一个更新器和许多消费者。在像 Java 这样的语言中,只需将此变量设置为 volatile 就可以确保所有这些消费者都可以看到更新的值。但是由于 volatile 不是 Go 中的一个选项,这里推荐的解决方案是什么?RW 锁可以工作,但对于这个简单的场景来说似乎有点过分。或者这个问题可以以某种方式通过渠道转换为沟通?
查看完整描述

2 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

即应该谨慎使用原子函数,但是对于这个使用atomic.Value 的简单场景,它是相当简单的:


var envVar atomic.Value

envVar.Store("")


...


// in write goroutine:

envVar.Store(os.Getenv("ENVVAR"))


...


// in read goroutine:

v := envVar.Load().(string)


查看完整回答
反对 回复 2021-12-13
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

如果 Java 原子变量可以满足您在 Java 应用程序中的需求,那么可以考虑使用 Go 的原子内存原语或更高级别的sync.Mutex / sync.RWMutex

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


查看完整回答
反对 回复 2021-12-13
  • 2 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信