Mutexes
Contexte
Section intitulée « Contexte »Un sync.Mutex garantit qu’une seule goroutine accède à une section critique à la fois. Utilisez Lock() et Unlock(). Pour les scénarios avec beaucoup de lectures, sync.RWMutex permet plusieurs lecteurs.
Protéger un compteur avec un mutex.
Code exemple
Section intitulée « Code exemple »package main
import ( "fmt" "sync")
type CompteurSecurise struct { mu sync.Mutex valeur int}
func (c *CompteurSecurise) Inc() { c.mu.Lock() c.valeur++ c.mu.Unlock()}
func (c *CompteurSecurise) Valeur() int { c.mu.Lock() defer c.mu.Unlock() return c.valeur}
func main() { var wg sync.WaitGroup c := CompteurSecurise{} for i := 0; i < 1000; i++ { wg.Add(1) go func() { c.Inc() wg.Done() }() } wg.Wait() fmt.Println(c.Valeur())}1000