Sobes.tech
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.