Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Go map 类型的线程安全吗?我有一个程序,它有许多 goroutine 读取和写入映射类型。如果我需要实施保护机制,最好的方法是什么?
您想使用 goroutine 并通过channels同步访问您的地图。常见问题解答中的解释:
经过长时间的讨论,我们决定地图的典型使用不需要从多个线程进行安全访问,并且在需要的情况下,地图可能是一些更大的数据结构或已经同步的计算的一部分。因此,要求所有映射操作都获取互斥锁会减慢大多数程序的速度并增加少数程序的安全性。然而,这不是一个容易的决定,因为这意味着不受控制的地图访问可能会使程序崩溃。 该语言不排除原子映射更新。在需要时,例如在托管不受信任的程序时,实现可以互锁地图访问。
经过长时间的讨论,我们决定地图的典型使用不需要从多个线程进行安全访问,并且在需要的情况下,地图可能是一些更大的数据结构或已经同步的计算的一部分。因此,要求所有映射操作都获取互斥锁会减慢大多数程序的速度并增加少数程序的安全性。然而,这不是一个容易的决定,因为这意味着不受控制的地图访问可能会使程序崩溃。
该语言不排除原子映射更新。在需要时,例如在托管不受信任的程序时,实现可以互锁地图访问。
从Go 1.9开始,最好的方法是使用sync.Map类型。