Sobes.tech
Junior — Middle

Kā uzvedas programma, ja vienlaikus tiek veikts konkurētspējīgs vērtību lasīšana no kartes?

sobes.tech AI

Atbilde no AI

Go valodā vienlaicīga droša lasīšana no kartes nenoved pie panikas vai kļūdām. Problēmas rodas, ja vienlaicīgi notiek rakstīšana vai lasīšana un rakstīšana. Ja programmā tikai dažas goroutines lasa vērtības no kartes bez to mainīšanas, tas ir droši. Bet, ja vismaz viena goroutine maina karti, ir nepieciešami sinhronizācijas mehānismi, piemēram, sync.RWMutex vai sync.Map.

Droša lasīšanas piemērs, izmantojot sync.RWMutex:

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

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

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

Tādējādi, vienlaicīga lasīšana bez rakstīšanas ir droša, bet rakstīšanas gadījumā nepieciešama sinhronizācija.