Sobes.tech
Junior — Middle

Hogyan biztosítható a biztonságos hozzáférés a kártyához több szálas környezetben?

sobes.tech MI

Válasz az MI-től

Go nyelven, több szálas környezetben a térkép (map) biztonságos eléréséhez szinkronizációt kell alkalmazni, mivel a map nem szálbiztos adatstruktúra. A leggyakoribb módszer a mutex (sync.Mutex vagy sync.RWMutex) használata az olvasás és írás közbeni hozzáférés blokkolására.

Példa sync.RWMutex használatával:

import (
    "sync"
)

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

func read(key string) int {
    mu.RLock()         // zárolás olvasáshoz
    defer mu.RUnlock()
    return m[key]
}

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

Emellett a Go-ban létezik a sync.Map típus, amely egy szálbiztos térképet valósít meg, optimalizálva a gyakori olvasási műveleteket. Használható, ha nem szükséges szigorú típusellenőrzés és egyszerűségre törekszünk:

import "sync"

var m sync.Map

m.Store("key", 42)          // tárolás
value, ok := m.Load("key")  // betöltés

Így, több szálas környezetben, a biztonságos hozzáféréshez mutexeket vagy a sync.Map-ot használja.