Il meccanismo primario per gestire lo stato in Go è
la comunicazione attraverso i canali. L’abbiamo visto per esempio
con i pool di worker. Ci sono però alcune altre
opzioni per gestire lo stato. Qui vedremo
l’uso del pacchetto |
|
![]() ![]()
|
|
|
|
|
|
Useremo un tipo integer atomico per rappresentare il nostro contatore (sempre positivo). |
|
Un WaitGroup ci aiuterà ad attendere che tutte le goroutine finiscano il loro lavoro. |
|
Avvieremo 50 goroutine che ognuna incrementa il contatore esattamente 1000 volte. |
|
Per incrementare atomicamente il contatore usiamo |
|
Aspettiamo fino a quando tutte le goroutine hanno finito. |
|
Qui nessuna goroutine sta scrivendo su ‘ops’, ma usando
|
|
Ci aspettiamo di ottenere esattamente 50.000 operazioni. Se avessimo
usato un integer non atomico e lo avessimo incrementato con
|
|
Successivamente vedremo i mutex, un altro strumento per gestire lo stato. |
Prossimo esempio: Mutex.