另一个goroutine修改它时,一个goroutine从结构中读取是否安全?

时间:2017-08-15 15:56:05

标签: go

更具体地说,在我的情况下,我有一个Web服务器和一个全局可访问的结构,Web服务器用它来生成一个页面。我有另一个Goroutine,它总是定期用新值更新该结构。这会引起问题吗?我是否需要实施一种机制来确保它在更新时不会被读取?

1 个答案:

答案 0 :(得分:1)

不,这就是不安全的定义,如果你测试它会被race detector捕获。您绝对需要同步访问权限,例如使用sync.Mutex or sync.RWMutex

如果始终拥有最新值并不重要,您还可以允许每个goroutine缓存结构的副本,然后定期从" master&#更新副本34;经常复制。如果频繁访问结构,这可以帮助避免由于锁争用而导致的一些性能问题。