Junior
Cosa in Go garantisce la sicurezza dei thread (thread safety)?
sobes.tech AI
Risposta dell'AI
La sicurezza della concorrenza in Go è garantita da diversi meccanismi:
- Goroutine — thread leggeri che consentono di eseguire codice in parallelo.
- Canali — lo strumento principale per scambiare dati in modo sicuro tra goroutine senza usare variabili condivise.
- Pacchetto sync — contiene primitive di sincronizzazione come
Mutexper bloccare sezioni critiche,RWMutexper dividere i blocchi tra lettura e scrittura, eWaitGroupper attendere il completamento di un gruppo di goroutine.
Esempio di utilizzo di un mutex per proteggere una risorsa condivisa:
import (
"sync"
)
var mu sync.Mutex
var contatore int
func incrementa() {
mu.Lock()
defer mu.Unlock()
contatore++
}
In questo modo, la sicurezza della concorrenza in Go si ottiene attraverso l'uso corretto di goroutine, canali e primitive di sincronizzazione del pacchetto sync.