为什么使用?
sync.map是处理map并发不安全的问题。
对于map,我们常用的做法就是加锁。
对于sync.Map
这些操作则是不需要的,来看下sync.Map
的特点:
- 1、以空间换效率,通过read和dirty两个map来提高读取效率
- 2、优先从read map中读取(无锁),否则再从dirty map中读取(加锁)
- 3、动态调整,当misses次数过多时,将dirty map提升为read map
- 4、延迟删除,删除只是为value打一个标记,在dirty map提升时才执行真正的删除
如何使用?
func main() {
//sync.Map 的方法进行调用,Store 表示存储,Load 表示获取,Delete 表示删除。
var scence sync.Map
//将键值对保存到sync.map中
scence.Store("xiaoming",97)
scence.Store("xiaohong",92)
scence.Store("xiaobai",99)
//将sync.map中根据键取值
fmt.Println(scence.Load("xiaohong"))
//根据键删除对应的键值对
scence.Delete("xiaoming")
//遍历所有sync.map中的键值对
scence.Range(func(k, v interface{}) bool {
fmt.Println("遍历:",k,v)
return true
})
}