关闭一个已经关闭的 Channel 会发生什么?Channel 有缓存和没缓存的区别是什么?

本文阅读 1 分钟
首页 golang 正文

题目序号:170

题目来源:哔哩哔哩

答案1:(小小)

问题1:

关闭已经关闭的 Channel 会发生 panic。

问题2:

无缓冲的与有缓冲 channel 有着重大差别,那就是一个是同步的 一个是非同步的。
比如:

c1:=make(chan int)        //无缓冲
c2:=make(chan int,1)      //有缓冲
c1<-1

无缓冲: 不仅仅是向 c1 通道放 1,而是一直要等有别的携程 <-c1 接手了这个参数,那么 c1<-1 才会继续下去,要不然就一直阻塞着。
有缓冲: c2<-1 则不会阻塞,因为缓冲大小是 1 (其实是缓冲大小为 0 ),只有当放第二个值的时候,第一个还没被人拿走,这时候才会阻塞。

本文来自投稿,不代表本站立场,如若转载,请注明出处:
syncpool的实现原理
« 上一篇 09-17
问了sync.Map(我说我对sync.Pool比较熟,就说Pool了)
下一篇 » 09-17

发表评论

发表评论