Sobes.tech
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 Mutex per bloccare sezioni critiche, RWMutex per dividere i blocchi tra lettura e scrittura, e WaitGroup per 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.