sync.Map是原子的吗?主要是指Load,Store,LoadOrStore,Delete

时间:2018-05-31 08:52:55

标签: go

作为tile,我指的是Go package sync.Map,它的函数可以被视为原子吗?主要是LoadStoreLoadOrStoreDelete函数。

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

请帮忙解释一下。

1 个答案:

答案 0 :(得分:1)

同步包的godoc页面显示:“地图就像一个Go map[interface{}]interface{},但对于多个goroutine并发使用是安全的,无需额外的锁定或协调。”

此语句保证不需要额外的互斥锁或跨goroutine同步。我不会将这种说法称为“原子”(具有非常精确的含义),但它确实意味着您不必担心多个goroutine能够进入LoadOrStore块(使用相同的密钥) )就像在你的例子中一样。