go的死锁
package main
func main() {
c, quit := make(chan int), make(chan int)
go func() {
//在一个go携程中,2个通道c被堵塞(没被取出),导致quit无法写入
c <- 1 // c通道的数据没有被其他goroutine读取走,堵塞当前goroutine
quit <- 0 // quit始终没有办法写入数据
}()
<-quit // quit 等待数据的写
}
解决方案,先把c吐出,排通管道,再吐出quit
package main
func main() {
c, quit := make(chan int), make(chan int)
go func() {
//在一个go携程中,2个通道c被堵塞(没被取出),导致quit无法写入
c <- 1 // c通道的数据没有被其他goroutine读取走,堵塞当前goroutine
quit <- 0 // quit始终没有办法写入数据
}()
<-c // 先排出c
<-quit // 再排出quit
}