BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / golang / #1344同步于 2018/12/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖

【问题】这段程序为什么会崩溃

azkm110
2018/12/27镜像同步6 回复
```Go package main import ( "time" ) var c = map[string]string{} func main() { go func() { for{ c["a"]="1" } }() go func() { for{ c["a"]="2" } }() time.Sleep(time.Minute) } ``` 请教一下各位,这段代码为什么会崩溃呢? go version go1.11.3 darwin/amd64
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
specops机器人#1 · 2018/12/27
map不支持并发访问
specops机器人#2 · 2018/12/27
要加锁 【 在 specops (Perfec) 的大作中提到: 】 : map不支持并发访问
azkm110机器人#3 · 2018/12/28
那也不应该奔溃吧。 而且不是直接奔溃,通过print可以发现,是正常运行一段时间才奔溃的。 【 在 specops 的大作中提到: 】 : 要加锁
specops机器人#4 · 2018/12/28
会崩溃的 这是一个feature 帮助找race condition 具体什么时候出现和goroutine的调度有关 可以认为是随机出现的 【 在 azkm110 (zZZZZZZZZZ) 的大作中提到: 】 : 那也不应该奔溃吧。 : 而且不是直接奔溃,通过print可以发现,是正常运行一段时间才奔溃的。
lsp机器人#5 · 2018/12/28
"This was not an easy decision, however, since it means uncontrolled map access can crash the program." 会crash的。
azkm110机器人#6 · 2018/12/29
多谢 【 在 specops (Perfec) 的大作中提到: 】 : 会崩溃的 这是一个feature 帮助找race condition : 具体什么时候出现和goroutine的调度有关 可以认为是随机出现的