У меня есть структура, которая совместно используется многими программами, и я хотел бы сократить количество вычислений одного поля в структуре, если это возможно. Вероятно, проще показать:
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()
}
Есть ли безопасный способ выполнить sh это? Это почти как если бы я хотел состояние гонки, где я не против, если оно записано несколько раз, но первый поток, который это сделает, должен предотвратить последующее чтение. Довольно плохо знаком с go и параллелизмом в целом.