【发布时间】:2018-03-26 06:13:42
【问题描述】:
fatal error: concurrent map read and map write
goroutine 5065809 [running]:
runtime.throw(0x6b4281, 0x21)
/usr/local/go/src/runtime/panic.go:566 +0x95 fp=0xc420c05670
sp=0xc420c05650
runtime.mapaccess1_faststr(0x65ea20, 0xc420015020, 0xc42178ea8e, 0x16,
0x0)
/usr/local/go/src/runtime/hashmap_fast.go:201 +0x4f3
fp=0xc420c056d0 sp=0xc420c05670
collider.(*Collider).httpHandler(0xc420013120, 0x7c4dc0, 0xc4209dcdd0,
0xc420a954a0)
/home/ec2-user/goWorkspace/src/collider/collider.go:176 +0x7dd
fp=0xc420c05c48 sp=0xc420c056d0
代码是
query := r.URL.Query()
if(query["q"] == nil){
c.httpError("must have a question",w)
return
}
m := query["q"][0] //this is line 176
它大约每天发生一次,并且在它发生之后整个 http 服务器都关闭了。我不知道 http get 是否在 map 中做一些并发写入。 如何解决?
【问题讨论】:
-
找到并发写入并摆脱数据竞争。
-
错误信息不完整。它还包含映射写入的跟踪。您需要同步这两个函数。
标签: go