Sobes.tech
Junior — Middle

Kaip užtikrinti saugų prieigą prie kortelės daugiagijų aplinkoje?

sobes.tech AI

Atsakymas iš AI

Go kalboje, norint saugiai pasiekti žemėlapį (map) daugiagijų aplinkoje, būtina naudoti sinchronizaciją, nes map nėra srauto saugi duomenų struktūra. Dažniausias būdas yra naudoti mutex'ą (sync.Mutex arba sync.RWMutex), kad užblokuotumėte prieigą skaitymo ir rašymo metu.

Pavyzdys naudojant sync.RWMutex:

import (
    "sync"
)

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

func read(key string) int {
    mu.RLock()         // užrakinti skaitymui
    defer mu.RUnlock()
    return m[key]
}

func write(key string, value int) {
    mu.Lock()          // užrakinti rašymui
    defer mu.Unlock()
    m[key] = value
}

Taip pat, Go kalboje yra sync.Map tipas, kuris įgyvendina srauto saugų žemėlapį su optimizacijomis dažniems skaitymo operacijoms. Jį galima naudoti, jei nėra reikalinga griežta tipizacija ir norima paprastumo:

import "sync"

var m sync.Map

m.Store("key", 42)          // įrašymas
value, ok := m.Load("key")  // skaitymas

Taigi, norint saugiai pasiekti žemėlapį daugiagijų aplinkoje, naudokite mutex'us arba sync.Map.