El mecanismo principal para manejar el estado en Go es
la comunicación a través de canales. Esto lo vimos, por ejemplo,
con pools de trabajadores. Sin embargo, hay algunas otras
opciones para manejar el estado. Aquí vamos a
ver el uso del paquete |
|
|
|
|
|
|
|
Vamos a utilizar un tipo de entero atómico para representar nuestro contador (siempre positivo). |
|
Un WaitGroup nos ayudará a esperar a que todas las goroutines terminen su trabajo. |
|
Iniciaremos 50 goroutines que incrementan el contador exactamente 1000 veces cada una. |
|
|
|
Para incrementar el contador de forma atómica utilizamos |
|
|
|
Espera hasta que todas las goroutines hayan terminado. |
|
Aquí ninguna goroutine está escribiendo en ‘ops’, pero utilizando
|
|
Esperamos obtener exactamente 50,000 operaciones. Si hubiéramos
usado un entero no atómico e incrementado con
|
|
A continuación, veremos los mutex, otra herramienta para manejar el estado. |
Siguiente ejemplo: Mutexes.