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

   日期:2020-05-23     浏览:108    评论:0    
核心提示:map可能是其他比较大的数据结构或者算法的一部分,而这些数据结构或者算法可能已经是同步的了。这种情况下如果map本身也保证同步的话,就需要每个map本身都维护一个锁,毫无疑问这样会在同步方面多此一举的同时拖累程序。需要注意的是,正因为map采取了这样的设计,所以在用map的时候一定注意,如果异步做修改操作会导致程序崩溃。(异步读数据没问题)另外,有时候线程安全的map还是需要的,除了自己加锁之外,可以用sync.Map,具体用法源码及其注释已经介绍的很清楚了。对其实现感兴趣的可以看下它的Store方gol

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

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

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

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服