Junior — Middle
Acest array asigură siguranța în utilizarea într-un mediu multi-thread?
sobes.tech AI
Răspuns de la AI
În Go, slice-urile obișnuite (tablouri cu dimensiune dinamică) nu sunt sigure pentru concurență în mod implicit. Dacă mai multe goroutines citesc și scriu în același slice fără sincronizare, acest lucru va duce la condiții de cursă și comportament imprevizibil.
Pentru a asigura siguranța într-un mediu multi-thread, trebuie să folosiți:
- Mutex-uri (
sync.Mutex) pentru blocarea accesului în timpul modificării slice-ului. - Canale (
chan) pentru transmiterea datelor între goroutines. - Structuri de date specializate din pachetul
syncsau biblioteci externe.
Exemplu cu mutex:
var mu sync.Mutex
var slice []int
func appendSafe(val int) {
mu.Lock()
defer mu.Unlock()
slice = append(slice, val)
}
Fără astfel de măsuri, array-ul nu este sigur pentru utilizare paralelă.