恩出现了个崩溃,说并发读写 map 在
json.Marshal(v)
看了下,是 v
的内容有 map 字段
那么如果 json.Marshal(v)
中,v 是个接口,那么出于防御性编程的考虑,是不是要做个锁来保护?
1
VeryCB 2017-12-24 14:57:08 +08:00
|
2
mornlight 2017-12-24 16:06:29 +08:00 1
map 不是 goroutine 安全的,你这种就是设计错了,不叫防御性编程。
|
3
flowerwrong 2017-12-24 17:49:23 +08:00 via iPhone
加锁或者 golang1.9 的 sync.map
|
4
honeycomb 2017-12-24 18:07:56 +08:00 via Android
很多 map 的默认实现不支持多线程读写,所以往往需要上锁。
考虑使用专门为并发设计的 map 实现,它们可能比仅是加锁有更好的性能。 |
5
gamexg 2017-12-24 19:12:15 +08:00
印象现在 map 并发读都不一定多线程安全了。
|