Sobes.tech
Senior

Може ли да се пише в една map от различни горутини едновременно? Какво ще се случи?

sobes.tech AI

Отговор от AI

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

За безопасна употреба на карта в конкурентна среда, може да:

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

Пример с mutex:

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

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

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