golang 并发读写 map

2017-12-24 14:55:47 +08:00
 helloworld12

恩出现了个崩溃,说并发读写 map 在

json.Marshal(v)

看了下,是 v 的内容有 map 字段

那么如果 json.Marshal(v)中,v 是个接口,那么出于防御性编程的考虑,是不是要做个锁来保护?

3097 次点击
所在节点    问与答
5 条回复
VeryCB
2017-12-24 14:57:08 +08:00
mornlight
2017-12-24 16:06:29 +08:00
map 不是 goroutine 安全的,你这种就是设计错了,不叫防御性编程。
flowerwrong
2017-12-24 17:49:23 +08:00
加锁或者 golang1.9 的 sync.map
honeycomb
2017-12-24 18:07:56 +08:00
很多 map 的默认实现不支持多线程读写,所以往往需要上锁。

考虑使用专门为并发设计的 map 实现,它们可能比仅是加锁有更好的性能。
gamexg
2017-12-24 19:12:15 +08:00
印象现在 map 并发读都不一定多线程安全了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/417221

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX