作为tile,我指的是Go package sync.Map,它的函数可以被视为原子吗?主要是Load
,Store
,LoadOrStore
和Delete
函数。
我还构建了一个简单的示例go playground,是否保证只有一个goroutine可以进入代码范围第15-17行?我的测试似乎可以保证。
请帮忙解释一下。
答案 0 :(得分:1)
同步包的godoc页面显示:“地图就像一个Go map[interface{}]interface{}
,但对于多个goroutine并发使用是安全的,无需额外的锁定或协调。”
此语句保证不需要额外的互斥锁或跨goroutine同步。我不会将这种说法称为“原子”(具有非常精确的含义),但它确实意味着您不必担心多个goroutine能够进入LoadOrStore
块(使用相同的密钥) )就像在你的例子中一样。