Go并发编程——channel

luan_tianjiao · 2014-10-11 16:00:02

@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