Sobes.tech
Junior — Middle

Jak zajistit bezpečný přístup ke kartě v prostředí s více vlákny?

sobes.tech AI

Odpověď od AI

V jazyce Go je nutné pro bezpečný přístup k mapě (map) v prostředí s více vlákny používat synchronizaci, protože map není datovou strukturou bezpečnou pro více vláken. Nejčastějším způsobem je použití mutexu (sync.Mutex nebo sync.RWMutex) k zámku přístupu při čtení a zápisu.

Příklad s použitím sync.RWMutex:

import (
    "sync"
)

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

func read(key string) int {
    mu.RLock()         // zamkne pro čtení
    defer mu.RUnlock()
    return m[key]
}

func write(key string, value int) {
    mu.Lock()          // zamkne pro zápis
    defer mu.Unlock()
    m[key] = value
}

Také v jazyce Go existuje typ sync.Map, který implementuje vlákny bezpečnou mapu s optimalizacemi pro časté operace čtení. Lze jej použít, pokud není potřeba přísná typová kontrola a požadována jednoduchost:

import "sync"

var m sync.Map

m.Store("key", 42)          // zápis
value, ok := m.Load("key")  // čtení

Tímto způsobem používejte mutexy nebo sync.Map pro bezpečný přístup k mapě v prostředí s více vlákny.