【发布时间】:2015-07-03 04:37:00
【问题描述】:
在我的代码中存储配置的常见模式是受 RWMutex 保护的“map[string]interface{}”,但通常在应用程序启动后(可以在多个 go-routine 中触发),地图变得完全只读。所以我有一种感觉,从某个时间点开始,读取时的 RWMutex 应该是不必要的。
此配置映射的示例位于 http://play.golang.org/p/tkbj9DBok_
让我想到这一点的一个事实是,在一些生产代码中,它实际上是在以这种方式对共享对象进行不受保护的访问(尽管它在初始化后大多是只读的),我理解使用 RWMutex 保护的正常方式,但有趣的是这个格式错误的代码在过去几个月里没有遇到问题。
在某个准确的“时间点”将写入从缓存刷新到内存并保证不再需要写入之后,是否真的可以在没有 RWMutex.RLock 的情况下进行读取?如果是,无锁访问前的时间点或如何设置条件?
【问题讨论】:
标签: concurrency go synchronization race-condition