Junior — Middle
Zabezpečuje tento poľ bezpečnosť pri použití v viacvláknovom prostredí?
sobes.tech AI
Odpoveď od AI
V Go, bežné rezy (polia s dynamickou veľkosťou) nie sú predvolene bezpečné pre vlákna. Ak niekoľko gorútín súčasne číta a zapisuje do toho istého rezu bez synchronizácie, dôjde ku konkurenčným podmienkam a nepredvídateľnému správaniu.
Na zabezpečenie bezpečnosti v prostredí s viacerými vláknami je potrebné používať:
- Zámky (
sync.Mutex) na zablokovanie prístupu pri zmene rezu. - Kanály (
chan) na prenos dát medzi gorutinami. - Špecializované dátové štruktúry z balíka
syncalebo externých knižníc.
Príklad s mutexom:
var mu sync.Mutex
var slice []int
func appendSafe(val int) {
mu.Lock()
defer mu.Unlock()
slice = append(slice, val)
}
Bez týchto opatrení nie je pole bezpečné pre paralelné použitie.