Sobes.tech
Intern

Vai ir droši lasīt kartes Go?

sobes.tech AI

Atbilde no AI

Go valodā lasīšana no map nav droša pavedieniem, ja vienlaikus notiek rakstīšana. Lai droši lasītu daudzpavedienu vidē, ir jāizmanto sinhronizācija, piemēram, sync.RWMutex bloķējot lasīšanai un rakstīšanai, vai jāizmanto sync.Map, kas ir īpaši izstrādāts konkurējošai piekļuvei.

Piemērs ar sync.RWMutex:

import (
    "sync"
)

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

func read(key string) (int, bool) {
    mu.RLock()         // lasīšanas bloķēšana
    defer mu.RUnlock() // bloķēšanas atbrīvošana
    val, ok := m[key]
    return val, ok
}

func write(key string, val int) {
    mu.Lock()         // rakstīšanas bloķēšana
    defer mu.Unlock() // bloķēšanas atbrīvošana
    m[key] = val
}

Vai izmantojiet sync.Map:

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

sync.Map ir noderīgs, kad ir daudz konkurējošu operāciju, bet tam ir īpašības, kas saistītas ar veiktspēju un API.