为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这个程序产生输出

为什么这个程序产生输出

Go
湖上湖 2021-06-03 09:12:44
我是GO谷歌的新手。在缓冲通道中,这里有一个程序:package mainimport "fmt"import "time"func main() {    c := make(chan int, 2)    c <- 1    fmt.Println(<-c)    time.Sleep(1000 * time.Millisecond)    c <- 2        fmt.Println(<-c)}它产生输出。但根据http://tour.golang.org/#64它说:仅当缓冲区已满时才发送到缓冲通道块。当缓冲区为空时接收块。正如它所说,它只在FULL时发送,为什么程序会产生输出而不是c在第一条语句中等待无穷大。?
查看完整描述

2 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

我猜你没有正确理解幻灯片。它说“仅阻止”您理解“仅工作”。

幻灯片上说的是:

  • 如果缓冲区未满,那么您的发送将正常工作并且不会阻塞

  • 如果缓冲区已满,则您的发送将阻塞,直到缓冲区未满为止。

所以你的例子按规定工作。


查看完整回答
反对 回复 2021-06-07
  • 2 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信