时空中的绘旅人废墟星地表第二层攻略

Go独霸sync.Map来措置map的并发独霸问题

2026-07-20 19:48:34栏目:娱乐

序言

在 Golang 中 map 不是独霸的并并发安然的 ,自 1.9 才引进了 sync.Map ,发独sync.Map 的霸问引进切实其实措置了 map 的并发安然问题 ,不过 sync.Map 却没有完成 len() 函数 ,独霸的并假定想要筹算 sync.Map 的发独长度 ,略微有点贫穷 ,霸问需求独霸 Range 函数 。独霸的并

map 并发独霸展示问题

func main() {  demo := make(map[int]int) go func() {   for j := 0; j < 1000; j++ {    demo[j] = j  } }() go func() {   for j := 0; j < 1000; j++ {    fmt.Println(demo[j])  } }() time.Sleep(time.Second * 1)}

奉行输进 :

fatal error: concurrent map read and 发独map write

sync.Map 措置并发独霸问题

func main() {  demo := sync.Map{ } go func() {   for j := 0; j < 1000; j++ {    demo.Store(j, j)  } }() go func() {   for j := 0; j < 1000; j++ {    fmt.Println(demo.Load(j))  } }() time.Sleep(time.Second * 1)}

奉行输进:
<nil> false
1 true

...

999 true

筹算 map 长度

func main() {  demo := make(map[int]int) for j := 0; j < 1000; j++ {   demo[j] = j } fmt.Println("len of demo:", len(demo))}

奉行输进:
len of demo: 1000

筹算 sync.Map 长度

func main() {  demo := sync.Map{ }  for j := 0; j < 1000; j++ {   demo.Store(j, j) } lens := 0 demo.Range(func(key, value inte***ce{ }) bool {   lens++  return true }) fmt.Println("len of demo:", lens)}

奉行输进 :
len of demo: 1000

小结

  • Load 加载 key 数据
  • Store 更新或新增 key 数据
  • Delete 删除 key 数据
  • Range 遍历数据
  • LoadOrStore 假定存在 key 数据则前去,反之则设置
  • LoadAndDelete 假定存在 key 数据则删除

到此这篇关于Go独霸sync.Map来措置map的霸问并发独霸问题标文章就引见到这了,更多相干Go言语 sync.Map措置map并发独霸内容请搜刮完竣下载之前的文章或延续不雅不雅不雅不雅鉴赏上面的相干文章希看大年夜师往后多多支撑完竣下载!

独霸的并

热门文章

HOT ARTICLE