golang sync.map 源码粗略理解
golang 默认的map是线程不安全机制
sync.map 封装了锁的机制,实现了线程安全
其他人理解 https://www.cnblogs.com/zkqiang/p/12551611.html
read 进行读取,dirty进行存储,其中数据类型实际都为 map[interface{}]*entry
含有三个方法
方法源码理解可以看上面的链接
先说说store方法,k,v参数为interface{},使用
先在read的map中寻找是否存在并未删除,存在说明不需要保存了
开启锁,防止来到这不之前其他协程操作产生变化,再次查询read map 如果存在(覆盖)dirty数据,read不存在第二步去dirty取值,查询都没有结果表示没有存储过,那么直接存储dirty中
load
read map中读取,如果不存在开启锁再次查询,如果还不存在去dirty中取值并在read map中设置等待下次取相同值直接返回
delete
查询read map 存在将 read map中 对象的属性 p=expunged 但不删除该数据 ,等待下次查询时如果拥有该数据 但p=expunged 则表示数据不存在
read map 不存在,开启锁再次查询read map 去dirty删除数据
相关推荐
瓜牛呱呱 2020-11-12
柳木木的IT 2020-11-04
yifouhu 2020-11-02
lei0 2020-11-02
源码zanqunet 2020-10-28
源码zanqunet 2020-10-26
一叶梧桐 2020-10-14
码代码的陈同学 2020-10-14
lukezhong 2020-10-14
lzzyok 2020-10-10
anchongnanzi 2020-09-21
clh0 2020-09-18
changcongying 2020-09-17
星辰大海的路上 2020-09-13
abfdada 2020-08-26
mzy000 2020-08-24
shenlanse 2020-08-18
zhujiangtaotaise 2020-08-18
xiemanR 2020-08-17