Go使用sync.Map来解决map的并发操作问题
作者:新亮笔记 时间:2024-04-29 13:05:57
目录
前言
map 并发操作出现问题
sync.Map 解决并发操作问题
计算 map 长度
计算 sync.Map 长度
前言
在 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 interface{}) 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 数据则删除
来源:https://juejin.cn/post/7024767670276849701
标签:Go,sync.Map,map,并发操作
0
投稿
猜你喜欢
基于go+vue实现的golang每日新闻数据浏览与检索平台(推荐)
2023-06-16 12:11:26
详解Python如何制作自动发送微信的程序
2021-06-04 13:24:53
Python 中导入csv数据的三种方法
2022-02-24 10:12:10
JavaScript实现三种常用网页特效(offset、client、scroll系列)
2023-08-27 11:54:30
PyQt5+pycharm开发环境搭建的实现步骤(图文)
2021-05-19 17:27:40
PyTorch详解经典网络ResNet实现流程
2022-08-06 09:40:32
蚁群算法js版
2008-10-08 10:15:00
Python批量处理csv并保存过程解析
2022-07-04 16:17:02
Django中create和save方法的不同
2021-06-16 14:24:02
Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
2024-01-24 06:36:03
Python 图像处理 Pillow 库详情
2022-12-05 04:46:12
python爬取m3u8连接的视频
2023-06-18 13:40:21
Python基础之循环语句用法示例【for、while循环】
2022-06-03 19:37:50
mysql数据库mysql: [ERROR] unknown option '--skip-grant-tables'
2024-01-18 08:41:27
golang 实现并发求和
2024-02-02 07:15:58
python 实现检验33品种数据是否是正态分布
2022-09-25 19:57:55
python 字典修改键(key)的几种方法
2021-01-05 16:58:00
Python入门之布尔值详解
2023-01-17 06:29:58
MSSQL 2005 LOG备份webshell的方法
2024-01-16 16:43:24
Python3使用pandas模块读写excel操作示例
2021-06-30 16:34:47