Skip to content

Commit

Permalink
Merge pull request gopl-zh#39 from qinhanlei/patch-9
Browse files Browse the repository at this point in the history
Update ch9-01.md
  • Loading branch information
cch123 authored Dec 6, 2017
2 parents d9c9556 + 4283571 commit 666c61a
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion ch9/ch9-01.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ var icons = map[string]image.Image{
func Icon(name string) image.Image { return icons[name] }
```

上面的例子里icons变量在包初始化阶段就已经被赋值了,包的初始化是在程序main函数开始执行之前就完成了的。只要初始化完成了,icons就再也不会修改的或者不变量是本来就并发安全的,这种变量不需要进行同步。不过显然我们没法用这种方法,因为update操作是必要的操作,尤其对于银行账户来说
上面的例子里icons变量在包初始化阶段就已经被赋值了,包的初始化是在程序main函数开始执行之前就完成了的。只要初始化完成了,icons就再也不会被修改。数据结构如果从不被修改或是不变量则是并发安全的,无需进行同步。不过显然,如果update操作是必要的,我们就没法用这种方法,比如说银行账户

第二种避免数据竞争的方法是,避免从多个goroutine访问变量。这也是前一章中大多数程序所采用的方法。例如前面的并发web爬虫(§8.6)的main goroutine是唯一一个能够访问seen map的goroutine,而聊天服务器(§8.10)中的broadcaster goroutine是唯一一个能够访问clients map的goroutine。这些变量都被限定在了一个单独的goroutine中。

Expand Down

0 comments on commit 666c61a

Please sign in to comment.