Sobes.tech
Junior — Middle

Kā nodrošināt drošu piekļuvi kartei daudzprocesu vidē?

sobes.tech AI

Atbilde no AI

Go valodā, lai droši piekļūtu kartē (map) daudzšūnu vidē, ir nepieciešams izmantot sinhronizāciju, jo map nav šūnu droša datu struktūra. Visbiežāk izmantotais veids ir mutex (sync.Mutex vai sync.RWMutex), lai bloķētu piekļuvi lasīšanai un rakstīšanai.

Piemērs ar sync.RWMutex:

import (
    "sync"
)

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

func read(key string) int {
    mu.RLock()         // bloķēt lasīšanai
    defer mu.RUnlock()
    return m[key]
}

func write(key string, value int) {
    mu.Lock()          // bloķēt rakstīšanai
    defer mu.Unlock()
    m[key] = value
}

Tāpat Go ir sync.Map tips, kas realizē šūnu drošu karti ar optimizācijām biežām lasīšanas operācijām. To var izmantot, ja nav nepieciešama stingra tipu pārbaude un ir vēlme pēc vienkāršības:

import "sync"

var m sync.Map

m.Store("key", 42)          // ieraksts
value, ok := m.Load("key")  // lasīšana

Tādējādi, lai droši piekļūtu mapē daudzšūnu vidē, izmantojiet mutexus vai sync.Map.