首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个程序会产生输出?

为什么这个程序会产生输出?
EN

Stack Overflow用户
提问于 2013-03-20 22:20:54
回答 2查看 140关注 0票数 1

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

代码语言:javascript
运行
复制
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在第一个语句中填满。?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-20 22:27:04

您的通道的缓冲区大小为2。你在里面放了一个整数然后拔出一个整数。然后你睡觉并重复这个过程。除非您尝试插入第三个int而不拔出任何int,否则通道不会阻塞。前两个ints将被缓冲。

票数 6
EN

Stack Overflow用户

发布于 2013-03-21 09:26:00

我猜你没有正确理解幻灯片。上面写着“只阻止”你明白“只工作”。

幻灯片上写的是:

  • 如果缓冲区未满,则发送将正常工作,并且不会阻塞
  • 如果缓冲区已满,则发送将阻塞,直到缓冲区未满为止。

因此,您的示例正在按指定的方式工作。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15535920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档