helloworld12
V2EX  ›  问与答

golang 并发读写 map

  •  
  •   helloworld12 · Dec 24, 2017 · 3876 views
    This topic created in 3245 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
    mornlight
    mornlight
    Dec 24, 2017❤️1
    2
    map 不是 goroutine 安全的,你这种就是设计错了,不叫防御性编程。
    flowerwrong
    flowerwrong
    Dec 24, 2017 via iPhone
    3
    加锁或者 golang1.9 的 sync.map
    honeycomb
    honeycomb
    Dec 24, 2017 via Android
    4
    很多 map 的默认实现不支持多线程读写,所以往往需要上锁。

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