Existe alguma maneira elegante de pausar e retomar qualquer outra goroutine em golang?

No meu caso, eu tenho milhares de goroutines trabalhando simultaneamentework(). Eu também tive umsync() goroutine. Quandosync Começa, eu preciso de qualquer outra goroutine para fazer uma pausa por um tempo depois de terminar o trabalho de sincronização. Aqui está o meu 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()
}

Agora o problema é, desde<- está sempre bloqueando a leitura, toda vez vai parasync_stat := <- channel está bloqueando. Eu sei que se o canal foi fechado não será bloqueado, mas desde que eu tenho que usar esse canal atéwork() sai e não encontrei nenhuma maneira de reabrir um canal fechado.

Eu suspeito de mim mesmo de um jeito errado, então qualquer ajuda é apreciada. Existe alguma maneira "elegante" de pausar e retomar qualquer outra goroutine em golang?

questionAnswers(1)

yourAnswerToTheQuestion