1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 12:32:21 +00:00

MISC - 69行发生操作才可能完成应该是发送操作才可能完成

This commit is contained in:
andrew 2018-09-07 19:03:42 +08:00
parent c5284a223c
commit 78d92f123a

View File

@ -66,7 +66,7 @@ func main() {
} }
``` ```
根据Go语言内存模型规范对于从无缓冲Channel进行的接收发生在对该Channel进行的发送完成之前。因此后台线程`<-done`接收操作完成之后,`main`线程的`done <- 1`操作才可能完成从而退出main、退出程序而此时打印工作已经完成了。 根据Go语言内存模型规范对于从无缓冲Channel进行的接收发生在对该Channel进行的发送完成之前。因此后台线程`<-done`接收操作完成之后,`main`线程的`done <- 1`操作才可能完成从而退出main、退出程序而此时打印工作已经完成了。
上面的代码虽然可以正确同步但是对管道的缓存大小太敏感如果管道有缓存的话就无法保证main退出之前后台线程能正常打印了。更好的做法是将管道的发送和接收方向调换一下这样可以避免同步事件受管道缓存大小的影响 上面的代码虽然可以正确同步但是对管道的缓存大小太敏感如果管道有缓存的话就无法保证main退出之前后台线程能正常打印了。更好的做法是将管道的发送和接收方向调换一下这样可以避免同步事件受管道缓存大小的影响