go - sync.Map 是原子的吗?主要是指加载、存储、加载或存储、删除
问题描述
作为 tile,我指的是 Go 包sync.Map,它的功能可以被认为是原子的吗?主要是Load
, Store
, LoadOrStore
, 和Delete
函数。
我还建了一个简单的例子go playground,是否保证只有一个goroutine可以进入15-17行的代码范围?正如我的测试似乎可以保证。
请帮忙解释一下。
解决方案
同步包的godoc页面说:“Map 就像一个 Go map[interface{}]interface{}
,但可以安全地被多个 goroutine 并发使用,而无需额外的锁定或协调。”
该语句保证不需要额外的互斥锁或跨 goroutines 的同步。我不会将该声明称为“原子”(具有非常精确的含义),但这确实意味着您不必担心多个 goroutine 能够LoadOrStore
像您的示例中那样进入一个块(使用相同的键) .
推荐阅读
- docker - 如何在 docker-compose.yml 中针对不同的构建环境运行不同的 ENTRYPOINT 命令?
- sql - 有什么方法可以创建这个触发器还是我应该使用其他东西?
- c# - 如何使用 selenium c# 检测网页上的验证码?
- php - 汇总 WordPress 上的所有货币
- wordpress - wordpress 用户和外部平台的订阅者
- c# - 访问 DNN Web API 时出现 404 错误
- python - 全局变量是否成为 Pyglet window.event 函数中的局部变量
- javascript - 如何从特殊字符之间提取多个字符串
- javascript - 在模板文字中呈现新行或换行符?
- angular - mat-selection-list 在角度中具有嵌套的 for 循环