我是来自谷歌的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的说法:
仅当缓冲区为完全时才发送到缓冲信道块。当缓冲区为空时接收块。
正如它所说的,它只在完全时发送,为什么程序会产生一个输出,而不是等待c
在第一个语句中填满。?
发布于 2013-03-20 22:27:04
您的通道的缓冲区大小为2。你在里面放了一个整数然后拔出一个整数。然后你睡觉并重复这个过程。除非您尝试插入第三个int而不拔出任何int,否则通道不会阻塞。前两个ints将被缓冲。
发布于 2013-03-21 09:26:00
我猜你没有正确理解幻灯片。上面写着“只阻止”你明白“只工作”。
幻灯片上写的是:
因此,您的示例正在按指定的方式工作。
https://stackoverflow.com/questions/15535920
复制相似问题