判断map是否为空_golang的sync包系列讲解(1):sync.Map

sync.Map是一个线程安全的map结构,一般用于多读少写的并发操作,今天带大家从源码看懂sync.Map

sync.Map是一个线程安全的map结构,一般用于多读少写的并发操作,下图是sync.Map的数据结构

9f0e2131d6dfe465bc235500bc4a40da.png

图引至码农桃花源公众号

type Map struct {mu Mutexread atomic.Value // readOnlydirty map[interface{}]*entrymisses int}

mu是Map的互斥锁用于对并发操作进行加锁保护,read是用于存储只读内容的,可以提供高并发的读操作。 dirty是一个原始的map结构体,对dirty的操作需要加锁,dirty包含了全量的数据,在读数据的时候会先读取read,read读取不到再读dirty。 misses 是read读取失败的次数,当多次读取失败后 misses 累计特定值,dirty就会升级成read。sync.Map 这里采用的策略类似数据库常用的”读写分离”,技术都是相通的O(∩_∩)O

sync.Map用法

func main() {var value sync.Map// 写入value.Store("your name", "shi")value.Store("her name", "kanon")// 读取name, ok := value.Load("your name")if !ok {println("can't find name")}fmt.Println(name)// 遍历value.Range(func(ki, vi interface{}) bool {k, v := ki.(string), vi.(string)fmt.Println(k, v)return true})// 删除value.Delete("your name")/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值