Sobes.tech
Junior — Middle

Бир нече goroutine-дан бир убакта Map сыяктуу жалпы ресурстарды коопсуз колдонуу мүмкүнбү?

sobes.tech AI

AIден жооп

Жок, Go'догу стандарттык карта (map) көптөгөн жиптер үчүн коопсуз эмес жана кошумча синхрондоштуруу болбосо бир эле учурда бир нече горутинден колдонулбайт. Коргоосуз биргелешкен кирүү маалыматтык жарыш жана паникага алып келиши мүмкүн.

Көптөгөн жиптер менен иштеген чөйрөдө бөлүштүрүлгөн ресурстарды, мисалы, карталарды, коопсуз колдонуу үчүн:

  • sync.Mutex же sync.RWMutex колдонуп, картага кирүүнү коргоо.
  • sync.Map колдонуу, бул карта үчүн атайын жана жиптерге коопсуз структура.

Mutex менен мисал:

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

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

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

sync.Map колдонуу:

var m sync.Map

m.Store("key", 42)
value, ok := m.Load("key")