我想从并发线程向 Golang 映射添加一个新的键值对。问题是,如果地图中存在密钥,我们不会创建新的密钥对。从多线程的角度来看,如何检查当前条件以及如果键不存在则插入键值。有没有什么方法可以组织代码以在第一次遇到时安全地添加密钥?主要问题是安全地初始化互斥体
2 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
我建议结合sync.Map
存储键值和sync.Once
值内部来执行一次性初始化。
这是一个例子:
type Value struct {
init sync.Once
someValue string
}
func (v *Value) Init() {
v.init.Do(func() {
// This function will only be executed one time
v.someValue = "initialized"
})
}
func main() {
var m sync.Map
v1, _ := m.LoadOrStore("key", &Value{})
v1.(*Value).Init() // init function is called
v2, _ := m.LoadOrStore("key", &Value{})
v2.(*Value).Init() // init function is not called
}
- 2 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消