From 78d92f123a4f97e53436e6781bdc91d4788b038a Mon Sep 17 00:00:00 2001 From: andrew Date: Fri, 7 Sep 2018 19:03:42 +0800 Subject: [PATCH] =?UTF-8?q?MISC=20-=2069=E8=A1=8C`=E5=8F=91=E7=94=9F?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=89=8D=E5=8F=AF=E8=83=BD=E5=AE=8C=E6=88=90?= =?UTF-8?q?`=E5=BA=94=E8=AF=A5=E6=98=AF`=E5=8F=91=E9=80=81=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=89=8D=E5=8F=AF=E8=83=BD=E5=AE=8C=E6=88=90`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch1-basic/ch1-06-goroutine.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch1-basic/ch1-06-goroutine.md b/ch1-basic/ch1-06-goroutine.md index fdd31c8..a197eae 100644 --- a/ch1-basic/ch1-06-goroutine.md +++ b/ch1-basic/ch1-06-goroutine.md @@ -66,7 +66,7 @@ func main() { } ``` -根据Go语言内存模型规范,对于从无缓冲Channel进行的接收,发生在对该Channel进行的发送完成之前。因此,后台线程`<-done`接收操作完成之后,`main`线程的`done <- 1`发生操作才可能完成(从而退出main、退出程序),而此时打印工作已经完成了。 +根据Go语言内存模型规范,对于从无缓冲Channel进行的接收,发生在对该Channel进行的发送完成之前。因此,后台线程`<-done`接收操作完成之后,`main`线程的`done <- 1`发送操作才可能完成(从而退出main、退出程序),而此时打印工作已经完成了。 上面的代码虽然可以正确同步,但是对管道的缓存大小太敏感:如果管道有缓存的话,就无法保证main退出之前后台线程能正常打印了。更好的做法是将管道的发送和接收方向调换一下,这样可以避免同步事件受管道缓存大小的影响: