Sobes.tech
Junior — Middle

Turli raqobat qilayotgan gorutinlardan bir vaqtning o'zida Mapga yozish natijasida qanday oqibatlar yuzaga keladi?

sobes.tech AI

AIdan javob

Go tilida standart xarita (map) bir vaqtning o'zida bir nechta goroutinlardan o'qish va yozish uchun xavfsiz emas. Agar bir nechta goroutinlar bir vaqtning o'zida bir xil xaritaga yozishga harakat qilsa, bu ma'lumotlar urushiga, runtime panikasiga (fatal error: concurrent map writes) va dasturning oldindan aytib bo'lmaydigan xatti-harakatlariga olib keladi.

Muammolarni oldini olish uchun:

  • Mapga kirishni himoya qilish uchun mutexlar (sync.Mutex) dan foydalaning.
  • sync.Map kabi maxsus, xavfsiz ma'lumot tuzilmalaridan foydalaning.

Mutex bilan misol:

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

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

Bunday himoyasiz, dastur kutilmagan tarzda to'xtashi mumkin.