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()
}
Без такава защита, програмата може неочаквано да се затвори.