Sobes.tech
Junior — Middle

Çox iş parçacığı mühitində Map-dən məlumat oxuyarkən təhlükəsizliyi təmin etmək mümkündürmü?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da, standart xəritə (map) eyni vaxtda təhlükəsiz deyil. Əgər bir neçə goroutine map-dən oxuyursa və yazmırsa, bu təhlükəsizdir. Ancaq, ən azı bir goroutine map-ə yazırsa, eyni vaxtda oxuma və yazma panikə səbəb olacaq.

Yazmadan təhlükəsiz oxuma üçün, adi map istifadə edə bilərsiniz və sinxronizasiya tələb olunmur. Ancaq yazma ehtimalı varsa, sinxronizasiya istifadə etmək lazımdır, məsələn, sync.RWMutex və ya sync.Map istifadə etməklə, bu xüsusilə çoxluqla giriş üçün nəzərdə tutulub.

sync.RWMutex ilə təhlükəsiz oxuma və yazma nümunəsi:

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

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

// Oxuma
func read(key string) (int, bool) {
    mu.RLock()
    defer mu.RUnlock()
    val, ok := m[key]
    return val, ok
}

Əgər zəmanət verirsinizsə ki, map dəyişmir, sonra eyni vaxtda oxuma təhlükəsizdir, əlavə sinxronizasiya olmadan.