Sobes.tech
Junior — Middle

Ҳангоми навиштани ҳамзамон дар Map аз ҷониби gorutinҳои рақобатпазир, чӣ оқибатҳо ба вуҷуд меоянд؟

sobes.tech AI

Ҷавоб аз AI

В Go стандартната карта (map) не е безопасна за едновремен достъп за четене и писане от няколко горутини. Ако няколко горутини едновременно се опитат да пишат в една и съща карта без синхронизация, това ще доведе до състезателни условия, паника по време на изпълнение (фатална грешка: едновременни писания в карта) и непредсказуемо поведение на програмата.

За да избегнете проблеми, трябва да използвате:

  • Мютекси (sync.Mutex) за защита на достъпа до картата.
  • Специализирани безопасни за многопоточна работа структури от данни, като например sync.Map.

Пример с мютекс:

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

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

Без такава защита, програмата може неочаквано да се затвори.