如何安全地将新的键值对添加到本地地图中

我想从并发线程向 Golang 映射添加一个新的键值对。问题是,如果地图中存在密钥,我们不会创建新的密钥对。从多线程的角度来看,如何检查当前条件以及如果键不存在则插入键值。

有没有什么方法可以组织代码以在第一次遇到时安全地添加密钥?

主要问题是安全地初始化互斥体


守着星空守着你
浏览 99回答 2
2回答

烙印99

有没有什么方法可以组织代码以在第一次遇到时安全地添加密钥?不,您需要适当的同步。

qq_花开花谢_0

我建议结合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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go