2022-11-25 577
在 Golang 中 map 不是并发安全的,自 1.9 才引入了 sync.Map ,sync.Map 的引入确实解决了 map 的并发安全问题,不过 sync.Map 却没有实现 len() 函数,如果想要计算 sync.Map 的长度,稍微有点麻烦,需要使用 Range 函数。
 
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
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
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
func main() {
 demo := sync.Map{}
 
 for j := 0; j < 1000; j++ {
  demo.Store(j, j)
 }
 lens := 0
 demo.Range(func(key, value interface{}) bool {
  lens++
  return true
 })
 fmt.Println("len of demo:", lens)
}
 
执行输出:
len of demo: 1000
小结
到此这篇关于Go使用sync.Map来解决map的并发操作问题的文章就介绍到这了,更多相关Go语言 sync.Map解决map并发操作内容请搜索M135模板网以前的文章或继续浏览下面的相关文章希望大家以后多多支持M135模板网!
原文链接:https://www.tuonang.com/?id=2193
=========================================
https://www.tuonang.com/ 为 “模板狼-专注于苹果cms模板网站” 唯一官方服务平台,请勿相信其他任何渠道。
苹果cms模板 2022-09-09
苹果cms模板 2022-09-09
苹果cms模板 2022-09-09
苹果cms模板 2022-08-15
苹果cms模板 2022-09-09
苹果cms模板 2023-11-19
苹果cms模板 2023-11-18
苹果cms模板 2023-11-18
苹果cms模板 2022-09-09
苹果cms模板 2022-09-09
游客 2025年03月16日
游客 2025年03月16日
游客 2025年03月16日
游客 2025年03月16日
游客 2025年03月16日
扫码二维码
获取最新动态
