【发布时间】:2020-02-13 08:53:07
【问题描述】:
我有一个在许多 goroutine 之间共享的结构,如果可能的话,我想减少计算结构上一个字段的次数。可能更容易显示:
type Container struct {
Items []Item
mu sync.RWMutex
}
(container *Container) func loadContainer() {
if container.Items != nil { // This is detected as a race condition by go
return
}
container.mu.Lock()
container.Items = loadItems() // Does some logic that I would like to avoid repeating
container.mu.Unlock()
}
有没有一种安全的方法可以做到这一点?这几乎就像我想要一个竞争条件,我不介意它是否被多次写入,但这样做的第一个线程应该阻止后续读取这样做。相当新的东西和一般的并发性。
【问题讨论】:
-
调用代码是否首先需要为此负责?也许在返回实例之前公开一个构造函数
NewContainer() *container会更容易。
标签: go concurrency