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

知识 · 2026-09-16 02:49:32

序言

在 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并发独霸内容请搜刮完竣下载之前的文章或延续不雅不雅不雅不雅鉴赏上面的相干文章希看大年夜师往后多多支撑完竣下载!

独霸的并

文章推荐:

陈浩平易近片子《苍天降妖录》优酷上线 苍天降妖录何处可以看?

与其自怨自艾 ,不如夯实勤奋

关于教师节的作文:真挚的祝福

与其自怨自艾 ,不如夯实勤奋

《情回萨拉乌苏》杀青 情回萨拉乌苏剧情引见

与其自怨自艾,不如夯实勤奋

黑甜乡西游手游夏季派对活动攻略

关于我转生变成史莱姆这档事余晖秘境打法攻略

片子《妖妖铃》甚么上映 ?有哪些演员明星加盟?

关于教师节的作文 :厉害的谢老师

【七月浅谈】生命的价值

创作创作创造与魔法雀舌罗汉松种子掉落踪掉落踪编制

热门浏览