为什么这个程序产生输出

我是GO谷歌的新手。在缓冲通道中,这里有一个程序:


package main


import "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在第一条语句中等待无穷大。?


湖上湖
浏览 178回答 2
2回答

繁星淼淼

我猜你没有正确理解幻灯片。它说“仅阻止”您理解“仅工作”。幻灯片上说的是:如果缓冲区未满,那么您的发送将正常工作并且不会阻塞如果缓冲区已满,则您的发送将阻塞,直到缓冲区未满为止。所以你的例子按规定工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go