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