Exclusión Mutua de Goroutinas Simultáneas

En mi código hay tres rutinas concurrentes. Intento dar una breve descripción de mi código,

Routine 1 {
do something

*Send int to Routine 2
Send int to Routine 3
Print Something
Print Something*

do something
}

Routine 2 {
do something

*Send int to Routine 1
Send int to Routine 3
Print Something
Print Something*

do something
}

Routine 3 {
do something

*Send int to Routine 1
Send int to Routine 2
Print Something
Print Something*

do something
}

main {
routine1
routine2
routine3
}

Quiero eso, mientras que los códigos entre dos hacen algo (los códigos entre dos marcas de estrellas) se está ejecutando, el flujo de control no debe ir a otras gorutinas. Por ejemplo, cuando la rutina1 ejecuta los eventos entre dos estrellas (eventos de envío e impresión), las rutinas 2 y 3 deben bloquearse (significa que el flujo de ejecución no pasa a la rutina 2 o 3 desde la rutina 1). Después de completar el último evento de impresión, el flujo de ejecución puede pasar a la rutina 2 o 3. ¿Alguien puede ayudarme especificando, cómo puedo lograr esto? ¿Es posible implementar la especificación anterior por WaitGroup? ¿Alguien puede mostrarme dando un ejemplo simple de cómo implementar el ejemplo especificado anteriormente usando WaitGroup? Gracias

NB: doy dos opciones de envío y dos de impresión, de hecho, hay muchos envíos e impresiones.

Respuestas a la pregunta(8)

Su respuesta a la pregunta