Sobes.tech
Junior — Middle

Kuidas tagada turvaline juurdepääs kaardile mitme niidiga keskkonnas?

sobes.tech AI

Vastus AI-lt

Go keeles on vaja kasutada sünkroniseerimist, et turvaliselt pääseda kaardile (map) mitme niidiga keskkonnas, kuna map ei ole niiditurvaline andmestruktuur. Kõige levinum viis on kasutada mutexi (sync.Mutex või sync.RWMutex), et blokeerida juurdepääs lugemise ja kirjutamise ajal.

Näide sync.RWMutex kasutamisest:

import (
    "sync"
)

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

func read(key string) int {
    mu.RLock()         // lukustame lugemiseks
    defer mu.RUnlock()
    return m[key]
}

func write(key string, value int) {
    mu.Lock()          // lukustame kirjutamiseks
    defer mu.Unlock()
    m[key] = value
}

Samuti on Go-s olemas sync.Map tüüp, mis realiseerib niiditurvalise kaardi koos optimeerimistega sagedaste lugemistoimingute jaoks. Seda saab kasutada, kui ei ole vaja ranget tüübitäpsust ja soovitakse lihtsust:

import "sync"

var m sync.Map

m.Store("key", 42)          // salvestamine
value, ok := m.Load("key")  // lugemine

Seega, mitme niidiga keskkonnas kasutage turvaliseks juurdepääsuks mutex'e või sync.Map-i.