go的map是线程安全的吗?

题目来源:字节

答案1:

  • 线程安全:对map进行并发读写时,如果程序能正常运行并能得到预期的结果。Map默认不是并发安全的,并发读写时程序会panic。
  • map为什么不支持线程安全?和场景有关,官方认为大部分场景不需要多个协程进行并发访问,如果为小部分场景加锁实现并发访问,大部分场景将付出加锁代价(性能降低)。
  • 实现:
    1)加读写锁(map+sync.RWMutex)
    2)使用Go提供的sync.Map(内部加了锁)