7. sync.Map¶
map 在并发情况下,只读是线程安全的,同时读写是线程不安全的。
sync.Map 没有提供获取 map 数量的方法,替代方法是在获取 sync.Map 时遍历自行计算数量,sync.Map 为了保证并发安全有一些性能损失, 因此在非并发情况下,使用 map 相比使用 sync.Map 会有更好的性能。
package main
import (
"fmt"
"sync"
)
func main01() {
m := make(map[int]int)
go func(){
for {
m[1] = 1
}
}()
go func(){
for {
_ = m[1]
}
}()
for{
}
}
func main(){
var m sync.Map
m.Store("one",1)
m.Store("two",2)
fmt.Println(m.Load("one"))
m.Delete("one")
m.Range(func(k,v interface{}) bool{
fmt.Println(k,v)
return true
})
}