Sobes.tech
Intern

Go-da xəritəni təhlükəsiz oxumaq mümkündürmü?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, map-dən oxumaq, eyni zamanda yazma baş verdikdə, çoxmərhələli təhlükəsiz deyil. Çoxmərhələli mühitdə təhlükəsiz oxumaq üçün sinxronizasiya istifadə edilməlidir, məsələn, sync.RWMutex istifadə edərək oxuma və yazma üçün kilidləmə və ya xüsusi olaraq hazırlanmış sync.Map istifadə etmək.

sync.RWMutex ilə nümunə:

import (
    "sync"
)

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

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

func write(key string, val int) {
    mu.Lock()         // yazma kilidi
    defer mu.Unlock() // kilidi aç
    m[key] = val
}

Yaxud sync.Map istifadə edin:

import "sync"

var m sync.Map

func read(key string) (interface{}, bool) {
    return m.Load(key)
}

func write(key string, val interface{}) {
    m.Store(key, val)
}

sync.Map çoxsaylı mübarizə əməliyyatları üçün əlverişlidir, lakin performans və API baxımından öz xüsusiyyətləri var.