Sobes.tech
Junior — Middle

Bir neçə goroutine-dən eyni zamanda giriş zamanı Map kimi ümumi resursları təhlükəsiz istifadə etmək mümkündürmü?

sobes.tech Süni İntellekt

AI-dan cavab

Xeyr, Go-da standart xəritə (map) çox iş parçacığı üçün təhlükəsiz deyil və əlavə sinxronizasiya olmadan eyni zamanda bir neçə goroutine tərəfindən istifadə edilə bilməz. Qorumasız çox iş parçacığına giriş yarış şəraitinə və panikaya səbəb ola bilər.

Ümumi resurslar kimi xəritələri çox iş parçacığı mühitində təhlükəsiz istifadə etmək üçün:

  • sync.Mutex və ya sync.RWMutex istifadə edərək xəritəyə girişə nəzarət edə bilərsiniz.
  • sync.Map istifadə edin, bu, xəritələr üçün ixtisaslaşmış və çox iş parçacığı üçün təhlükəsiz olan məlumat strukturu.

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()
}

func read(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return m[key]
}

sync.Map istifadəsi:

var m sync.Map

m.Store("key", 42)
value, ok := m.Load("key")