go map结构是否是线程安全的?

时间:2010-01-03 01:23:15

标签: multithreading map go goroutine

Go地图类型线程是否安全?我有一个程序,有许多goroutines读取和写入地图类型。如果我需要实施保护机制,那么最好的方法是什么?

2 个答案:

答案 0 :(得分:16)

您希望使用goroutine并通过channels同步对地图的访问权限。来自the FAQ的解释:

  

经过长时间的讨论,决定了地图的典型用途   不需要从多个线程安全访问,在这些情况下   它所做的,地图可能是一些较大数据结构的一部分   或已经同步的计算。因此要求   所有地图操作都会获取互斥锁会降低大多数程序的速度并添加   安全很少。然而,这不是一个容易的决定,因为它意味着   不受控制的地图访问可能导致程序崩溃。

     

该语言不排除原子地图更新。必要时,如此   当托管不受信任的程序时,实现可以   联锁地图访问。

答案 1 :(得分:2)

Go 1.9以来,最好的方法是使用sync.Map类型。