我有一个在许多 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()
}
有没有一种安全的方法可以做到这一点?这几乎就像我想要一个竞争条件,我不介意它是否被多次写入,但是这样做的第一个线程应该阻止后续读取这样做。相当新的东西和一般的并发性。
开满天机
相关分类