Sobes.tech
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 sync alebo 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.