Junior — Middle
Fərqli mübarizə aparan gorutinlərdən eyni zamanda Map-ə yazmaq hansı nəticələrə gətirib çıxarır?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da standart xəritə (map) çoxlu goroutinlardan eyni zamanda oxuma və yazma üçün təhlükəsiz deyil. Əgər bir neçə goroutin eyni vaxtda sinxronizasiyasız olaraq eyni xəritəyə yazmağa çalışarsa, bu, məlumatların yarışmasına, işləmə zamanı panikaya (fatal error: concurrent map writes) və proqramın proqnozlaşdırılmayan davranışına səbəb olacaq.
Məsələlərin qarşısını almaq üçün:
- Map-ə giriş üçün mutexlər (sync.Mutex) istifadə edin.
- Xüsusi, çoxluq üçün təhlükəsiz məlumat strukturları, məsələn, sync.Map istifadə edin.
Mutex ilə nümunə:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Bu qorunma olmadan, proqram qəfil bağlana bilər.