Junior — Middle
Quali tecniche di utilizzo di blocchi o altri meccanismi per prevenire l'accesso simultaneo ai dati conosci?
sobes.tech AI
Risposta dell'AI
Tecniche principali per prevenire l'accesso simultaneo ai dati in Go:
- Mutex (sync.Mutex): blocco della sezione critica in modo che un solo thread possa lavorare con i dati.
var mu sync.Mutex
mu.Lock()
// lavoro con dati condivisi
mu.Unlock()
-
RWMutex (sync.RWMutex): permette a più lettori di leggere i dati contemporaneamente, ma blocca la scrittura.
-
Canali (channels): trasmissione di dati tra goroutine, evitando l'accesso diretto ai dati condivisi.
-
Operazioni atomiche (sync/atomic): per operazioni semplici con variabili senza blocco completo.
-
sync.Once: per l'inizializzazione unica dei dati.
La scelta del meccanismo dipende dal compito: per esclusione mutua semplice — Mutex, per separare lettura e scrittura — RWMutex, per trasmissione di messaggi — canali.