Golang Map并发问题

今天在面试过程中遇到了一个问题:map在并发时怎么保证一致性(简化后的问题)。

这里记录一下

2大map

一个是老的map类型

一个是1.9版之后的sync.map

老的map解决办法比如 使用互斥锁,使用channel进行封装(太麻烦),sync.WaitGroup也是一个不错的选择

sync.map里面有一些常用方法需要了解一下:


func syncMap(){
	var sm sync.Map
	//向a这个key里面存111
	sm.Store("a",111)
	//读值
	sm.Load("a")
	//有"a"就load,没有就保存
	sm.LoadOrStore("a",2)
	//删除key
	sm.Delete("a")
	//便利循环sync.map
	sm.Range(func(key, value interface{}) bool {
		fmt.Printf("%v", value)
	})
}

接下来是源码解读:

https://blog.csdn.net/meifannao789456/article/details/106710554

总结一下:

sync.Map的核心实现:就是2个map,一个用于读,一个用于写

sync.Map的局限性:如果写远高于读,建议直接用sync.mutex+map

sync.Map的特点:1.保证高频读的无锁、2.空间换时间的做法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值