Sobes.tech
Junior — Middle

Агар чанд гурутинон ҳамзамон кӯшиш кунанд, ки ба як калиди дар харита дастрасӣ пайдо кунанд, чӣ мешавад?

sobes.tech AI

Ҷавоб аз AI

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

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

  • sync.Mutex за блокиране на достъпа до картата.
  • sync.RWMutex за разделяне на блокировките за четене и писане.
  • Специализирани структури, като sync.Map, които са безопасни за конкурентен достъп.

Пример за използване на sync.Mutex за защита на карта:

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

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]
}