helloworld12
V2EX  ›  问与答

golang 并发读写 map

  •  
  •   helloworld12 · Dec 24, 2017 · 3548 views
    This topic created in 3065 days ago, the information mentioned may be changed or developed.

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

    json.Marshal(v)
    

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

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

    Supplement 1  ·  Dec 24, 2017
    恩,出于正确编程考虑
    5 replies    2017-12-24 19:12:15 +08:00
    VeryCB
        1
    VeryCB  
       Dec 24, 2017
    mornlight
        2
    mornlight  
       Dec 24, 2017   ❤️ 1
    map 不是 goroutine 安全的,你这种就是设计错了,不叫防御性编程。
    flowerwrong
        3
    flowerwrong  
       Dec 24, 2017 via iPhone
    加锁或者 golang1.9 的 sync.map
    honeycomb
        4
    honeycomb  
       Dec 24, 2017 via Android
    很多 map 的默认实现不支持多线程读写,所以往往需要上锁。

    考虑使用专门为并发设计的 map 实现,它们可能比仅是加锁有更好的性能。
    gamexg
        5
    gamexg  
       Dec 24, 2017
    印象现在 map 并发读都不一定多线程安全了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3028 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 14:14 · PVG 22:14 · LAX 07:14 · JFK 10:14
    ♥ Do have faith in what you're doing.