golang的map为什么不设计成同步(安全)的

Posted -_-void

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang的map为什么不设计成同步(安全)的相关的知识,希望对你有一定的参考价值。

map可能是其他比较大的数据结构或者算法的一部分,而这些数据结构或者算法可能已经是同步的了。这种情况下如果map本身也保证同步的话,就需要每个map本身都维护一个锁,毫无疑问这样会在同步方面多此一举的同时拖累程序。

需要注意的是,正因为map采取了这样的设计,所以在用map的时候一定注意,如果异步做修改操作会导致程序崩溃。(异步读数据没问题)

另外,有时候线程安全的map还是需要的,除了自己加锁之外,可以用sync.Map,具体用法源码及其注释已经介绍的很清楚了。对其实现感兴趣的可以看下它的Store方法的实现,主要是用到了atomic包里的load跟swap等操作以及sync包下的Mutex

以上是关于golang的map为什么不设计成同步(安全)的的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中线程安全的map都有哪些?

golang中的map并发读写问题: Golang 协程并发使用 Map 的正确姿势

golang sync.Map 原理以及性能分析

Golang中sync.Map的实现原理

golang 从 map 获取值时的值拷贝问题

golang语言map的并发和排序