¿Hay alguna forma elegante de pausar y reanudar cualquier otra goroutina en Golang?

En mi caso, tengo miles de goroutines trabajando simultáneamente comowork(). También tuve unsync() goroutine Cuandosync comienza, necesito cualquier otra goroutina para hacer una pausa por un tiempo después de que se realiza el trabajo de sincronización. Aquí está mi código:

var channels []chan int
var channels_mutex sync.Mutex

func work() {
  channel := make(chan int, 1)
  channels_mutex.Lock()  
  channels = append(channels, channel)
  channels_mutex.Unlock()
  for {
    for {
      sync_stat := <- channel // blocked here
      if sync_stat == 0 { // if sync complete
        break  
      }
    }
    // Do some jobs
    if (some condition) {
      return
    }
  }
}

func sync() {
  channels_mutex.Lock()
  // do some sync

  for int i := 0; i != len(channels); i++ {
    channels[i] <- 0
  }
  channels_mutex.Unlock()
}

Ahora el problema es, ya que<- Siempre está bloqueando en lectura, cada vez que va async_stat := <- channel esta bloqueando Sé que el canal se cerró, no se bloqueará, pero como tengo que usar este canal hastawork() sale, y no encontré ninguna manera de volver a abrir un canal cerrado.

Sospecho de mí mismo de una manera incorrecta, por lo que cualquier ayuda es apreciada. ¿Hay alguna forma "elegante" de pausar y reanudar cualquier otra goroutina en Golang?

Respuestas a la pregunta(1)

Su respuesta a la pregunta