Sobes.tech
Junior — Middle

Xəritə tipli yaddaşda eyni vaxtda yazma zamanı hansı vəziyyətlər baş verə bilər?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, standart xəritə (map) eyni zamanda bir neçə goroutine-dən oxuma və yazma üçün təhlükəsiz deyil. Əgər bir neçə goroutine map-ə məlumat yazırsa və sinxronizasiya edilməzsə, bu, işləmə vaxtında "concurrent map writes" mesajı ilə panik və ya proqramın proqnozlaşdırılmayan davranışlarına səbəb ola bilər.

Belə problemlərin qarşısını almaq üçün, sinxronizasiya mexanizmlərindən, məsələn, mutex (sync.Mutex) və ya xüsusi strukturlardan, məsələn, sync.Map istifadə etmək lazımdır; bunlar eyni zamanda təhlükəsizdir.

Mutex ilə nümunə:

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

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

Bu qoruma olmadan, eyni zamanda yazma məlumatların pozulmasına və ya proqramın qəfil bağlanmasına səbəb ola bilər.