7.2.5 非缓冲的Channel,1. Happens before。第一版,352页,倒数第4行。
“针对非缓冲通道的接收操作会在与之相对应的发送操作完成之前完成。”
上面这一句话不能说完全错误,只是没有把事情说完全了。完整的说法是
“发送语句与接收语句,这两种语句同时执行,非缓冲通道才能成功传递值。先触发的语句会被阻塞,阻塞的语句后结束。”具体的来说,分为两种情况:
1. 触发发送语句,没有接收语句→→→发送语句阻塞,等待接收语句→→→触发接收语句,唤醒发送语句→→→传值成功→→→接收语句结束→→→发送语句结束。
2. 触发接收语句,没有发送语句→→→接收语句阻塞,等待发送语句→→→触发发送语句,唤醒接收语句→→→传值成功→→→发送语句结束→→→接收语句结束。
我把书上P353的代码中,发送语句和接收语句的位置换了一下位置,得到以下代码。也可以这里查看:https://play.golang.org/p/SAOWZqK6LI
``` go
package main
import (
"fmt"
"time"
)
func main() {
unbufChan := make(chan int)
go func() {
fmt.Println("2.Sleep one second before sending..")
time.Sleep(time.Second)
unbufChan <- 1
fmt.Println("3.Sent 1")
}()
fmt.Println("1.Waiting to receive")
num := <-unbufChan
fmt.Printf("4.Received %d n", num)
}
//output
//1.Waiting to receive
//2.Sleep one second before sending..
//3.Sent 1
//4.Received 1
```
错误内容汇总
《Go并发编程实战》热门书评
-
内容太啰嗦、枯燥
5有用 0无用 zxz 2015-03-02
大段枯燥的啰嗦文字描述,把简单的语法规则给复杂化,不直观,极大影响阅读速度和心情。无论是初学还是进一步学习,不推荐购买本书----------大段枯燥的啰嗦文字描述,把简单的语法规则给复杂化,不直观,极大影响阅读速度和心情。无论是初学还是进一步学习,不推荐购买本书...
-
书很罗嗦
3有用 0无用 ccbp2003 2015-02-16
书写的比较罗嗦,看着很费劲,有大话西游唐僧的感觉;举个例子来形容:一个英语老师花了两个小时给讲了一个单词,但是这个单词只需要学生记住,知道什么意思,了解使用要点即可,你能说这个老师好吗?他浪费了几十个学生两个小时时间,本来学生们在这两个小时可以做更有意义的事情。不亚于谋财害命。...
-
作者欠我几十块钱
1有用 0无用 DamnnnSure 2015-05-26
通篇充斥着作者蹩脚翻译的Language Specification,根本就不是一本通顺流畅的教材,前面所谓的那些“专家推荐”,估计许式伟之类的那些人,根本就tm没读过这本书就写推荐了。我到作者的微博上喷他写的差,他反倒说是我自己没理解。书中的技术错误也很多,稍微仔细点看,就能找到不少错...
-
总的来说还不错
0有用 1无用 风的尾巴 2015-03-06
怎么说比许XX那本还是好点的. 可能一方面这本篇幅大些.后面半部分讲解的并发和并行部分有些科普价值, 蛮好. 篇幅略多, 大段大段的文字, 比较考验耐心, 真的, 那段落就跟长篇小说一样啊. 对于已经有基础的, 肯定会嫌过度冗余了.对golang的调度器, goroutine下层几个线程的说明,...
-
此书需要多读几遍
0有用 0无用 小笨牛 2015-06-07
讲解细腻,非常深入,后面几章比较好读,前面的几章入门之后再看,一些地方计算机的原理讲解的比较透彻。建议将这本书当做入门后的第二本书来读吧,先了解下基础。讲解细腻,非常深入,后面几章比较好读,前面的几章入门之后再看,一些地方计算机的原理讲解的比较透彻。建议将这本书当做入门后的第二本书来读吧,先了解下基...