Junior — Middle
Czy ta tablica zapewnia bezpieczeństwo podczas korzystania w środowisku wielowątkowym?
sobes.tech AI
Odpowiedź od AI
W Go zwykłe slices (tablice o zmiennym rozmiarze) nie są domyślnie bezpieczne dla wielowątkowości. Jeśli kilka gorutyn odczytuje i zapisuje do tego samego slice'a bez synchronizacji, spowoduje to warunki wyścigu i nieprzewidywalne zachowanie.
Aby zapewnić bezpieczeństwo w środowisku wielowątkowym, należy używać:
- Mutexów (
sync.Mutex) do blokowania dostępu podczas modyfikacji slice'a. - Kanałów (
chan) do przesyłania danych między gorutynami. - Specjalistycznych struktur danych z pakietu
synclub bibliotek zewnętrznych.
Przykład z mutexem:
var mu sync.Mutex
var slice []int
func appendSafe(val int) {
mu.Lock()
defer mu.Unlock()
slice = append(slice, val)
}
Bez takich środków, tablica nie jest bezpieczna do użycia równoległego.