首页 > 解决方案 > sync.Map 是原子的吗?主要是指加载、存储、加载或存储、删除

问题描述

作为 tile,我指的是 Go 包sync.Map,它的功能可以被认为是原子的吗?主要是Load, Store, LoadOrStore, 和Delete函数。

我还建了一个简单的例子go playground,是否保证只有一个goroutine可以进入15-17行的代码范围?正如我的测试似乎可以保证。

请帮忙解释一下。

标签: go

解决方案


同步包的godoc页面说:“Map 就像一个 Go map[interface{}]interface{},但可以安全地被多个 goroutine 并发使用,而无需额外的锁定或协调。”

该语句保证不需要额外的互斥锁或跨 goroutines 的同步。我不会将该声明称为“原子”(具有非常精确的含义),但这确实意味着您不必担心多个 goroutine 能够LoadOrStore像您的示例中那样进入一个块(使用相同的键) .


推荐阅读