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.