Sobes.tech
Назад к вопросам
Junior — Middle
74

Какие последствия возможны, если несколько потоков одновременно модифицируют структуру данных типа map?

Компании, где спрашивали
Цифровая Эволюция

Ответ от нейросети

sobes.tech AI

В Go стандартная карта (map) не является потокобезопасной для одновременного чтения и записи из нескольких горутин. Если несколько потоков (горутин) одновременно модифицируют map без синхронизации, это может привести к панике во время выполнения с сообщением "concurrent map writes" или к непредсказуемому поведению программы.

Чтобы избежать таких проблем, необходимо использовать механизмы синхронизации, например, мьютексы (sync.Mutex) или специализированные потокобезопасные структуры данных, либо использовать пакет sync.Map, который реализует потокобезопасный map.

Пример с использованием мьютекса:

var (
    m = make(map[string]int)
    mu sync.Mutex
)

func write(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = value
}

func read(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return m[key]
}

Без такой синхронизации программа может аварийно завершиться или получить повреждённые данные.