Есть ли какой-нибудь элегантный способ приостановить и возобновить любую другую программу в Голанге?

В моем случае у меня есть тысячи горутин, работающих одновременно какwork(), У меня тоже былsync() goroutine. когдаsync запускается, мне нужна любая другая процедура, чтобы сделать паузу на некоторое время после выполнения задания синхронизации. Вот мой код:

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()
}

Теперь проблема в том, что, так как<- всегда блокируется на чтение, каждый раз идетsync_stat := <- channel блокирует Я знаю, что если канал был закрыт, он не будет заблокирован, но так как я должен использовать этот канал доwork() выходы, и я не нашел способа открыть закрытый канал.

Я подозреваю себя на неправильном пути, поэтому любая помощь приветствуется. Есть ли какой-нибудь "элегантный" способ приостановить и возобновить любую другую программу в Голанге?

Ответы на вопрос(1)

Ваш ответ на вопрос