Sobes.tech
Intern

Արդյոք անվտանգ է Go-ում քարտեզներ ընթերցել?

sobes.tech AI

Պատասխան AI-ից

Go լեզվում, map-ից ընթերցումը անվտանգ չէ հոսքերի համար, եթե միաժամանակ կատարվում է գրառում։ Բազմահոսքային միջավայրում անվտանգ ընթերցում կատարելու համար անհրաժեշտ է օգտագործել սինխրոնիզացիա, օրինակ՝ sync.RWMutex օգտագործելով ընթերցման և գրելու համար փակագծեր կամ օգտագործել sync.Map, որը հատուկ մշակված է մրցակցային մուտքի համար։

Օրինակ sync.RWMutex-ով՝

import (
    "sync"
)

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

func read(key string) (int, bool) {
    mu.RLock()         // ընթերցման փակագիծ
    defer mu.RUnlock() // բացում
    val, ok := m[key]
    return val, ok
}

func write(key string, val int) {
    mu.Lock()         // գրելու փակագիծ
    defer mu.Unlock() // բացում
    m[key] = val
}

Կամ օգտագործեք 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-ը հարմար է, երբ շատ մրցակցային գործողություններ են, բայց ունի առանձնահատկություններ կատարողականի և API-ի տեսանկյունից։