Sobes.tech
Intern

Biztonságos a térképek olvasása Go-ban?

sobes.tech MI

Válasz az MI-től

Go nyelven a map olvasása nem szálbiztos, ha egyidejűleg írás is történik. Többszálas környezetben biztonságos olvasáshoz szinkronizációt kell alkalmazni, például sync.RWMutex használatával olvasási és írási zárolást, vagy a sync.Map használatával, amely kifejezetten a konkurens hozzáférésre lett tervezve.

Példa sync.RWMutex-szel:

import (
    "sync"
)

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

func read(key string) (int, bool) {
    mu.RLock()         // olvasási zárolás
    defer mu.RUnlock() // zárolás feloldása
    val, ok := m[key]
    return val, ok
}

func write(key string, val int) {
    mu.Lock()         // írási zárolás
    defer mu.Unlock() // zárolás feloldása
    m[key] = val
}

Vagy használja a sync.Map-ot:

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

A sync.Map akkor hasznos, ha sok konkurens művelet történik, de sajátosságai vannak a teljesítmény és az API szempontjából.