使用channel的场景:

  • 在协程间转移数据所有权
  • 协调多个逻辑 使用mutex的场景:
  • 保护struct的内部变量

向nil通道读写或会阻塞

条件变量

c := sync.NewCond(&sync.Mutex{}) 

c.L.Lock()
for conditionTrue() == false {
    c.Wait() }
}
c.L.Unlock()
  • Concurrent in Go