У меня есть следующая структура:
type User struct {
Mutex sync.RWMutex
Username string
Stuff map[string]string
}
У меня также есть глобально следующее
var MyUsers []User
var UserMutex sync.RWMutex
Поскольку мое приложение обращается к срезу MyUsers тысячи раз в секунду, я подумалэто был бы лучший способ управлять производительностью.Если я хочу изменить отдельный элемент MyUsers, то я блокирую этот конкретный элемент с помощью:
MyUsers[x].Mutex.Lock()
Затем выполняйте любые изменения и разблокируйте его.
Мой вопрос: это безопасный способ?делать это?У меня есть обычный глобальный UserMutex для блокировки среза, только когда я добавляю к срезу ... Но при добавлении к срезу все существующие элементы перемещаются в память?
Что произойдет, если 1 поток добавляется к срезу, в то время как другой поток изменяет элемент?Может ли это произойти в приведенной выше настройке?
Могу ли я потенциально выделить достаточно большой фрагмент с помощью make (), чтобы любой метод append () не влиял на место в памяти?