Go并发编程——channel

luan_tianjiao ·
@luan_tianjiao 3缓冲机制中 c := make(chan int, 10) for i:=0;i<10;i++{ c<-12 } fmt.Println(len(c)) for j := range c{ fmt.Println(j) } 这部分代码报错,出现死锁的原因在 for j := range c,这段会一直循环监听channel c,而channel c 中没有缓存后便会阻塞,从而造成死锁. 解决办法两种:1)在生产者地方通过close()主动关闭channel,具体如下: for i:=0;i<10;i++{ c<-12     close(c) } 方法2:将消费者另开一个goroutine执行,阻塞另一个goroutine,而不阻塞主程序,具体如下: go func(){ for j := range c{ fmt.Println(j) }() time.Sleep(1*time.Second)
#1
更多评论
兄弟,,那个chanel顺序反了吧, func Count(ch chan int){ ch <- 1 fmt.Println("Counting") } 应该是 func Count(ch chan int){ fmt.Println("Counting") ch <-1 }
#2