V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
helloworld12
V2EX  ›  问与答

golang 并发读写 map

  •  
  •   helloworld12 · 2017-12-24 14:55:47 +08:00 · 3079 次点击
    这是一个创建于 2328 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    json.Marshal(v)
    

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

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

    第 1 条附言  ·  2017-12-24 16:42:56 +08:00
    恩,出于正确编程考虑
    5 条回复    2017-12-24 19:12:15 +08:00
    VeryCB
        1
    VeryCB  
       2017-12-24 14:57:08 +08:00
    mornlight
        2
    mornlight  
       2017-12-24 16:06:29 +08:00   ❤️ 1
    map 不是 goroutine 安全的,你这种就是设计错了,不叫防御性编程。
    flowerwrong
        3
    flowerwrong  
       2017-12-24 17:49:23 +08:00 via iPhone
    加锁或者 golang1.9 的 sync.map
    honeycomb
        4
    honeycomb  
       2017-12-24 18:07:56 +08:00 via Android
    很多 map 的默认实现不支持多线程读写,所以往往需要上锁。

    考虑使用专门为并发设计的 map 实现,它们可能比仅是加锁有更好的性能。
    gamexg
        5
    gamexg  
       2017-12-24 19:12:15 +08:00
    印象现在 map 并发读都不一定多线程安全了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3787 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:35 · PVG 12:35 · LAX 21:35 · JFK 00:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.