为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
守着星空守着你 2023-07-31 16:23:15
我想从并发线程向 Golang 映射添加一个新的键值对。问题是,如果地图中存在密钥,我们不会创建新的密钥对。从多线程的角度来看,如何检查当前条件以及如果键不存在则插入键值。有没有什么方法可以组织代码以在第一次遇到时安全地添加密钥?主要问题是安全地初始化互斥体
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

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

不,您需要适当的同步。


查看完整回答
反对 回复 2023-07-31
?
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

}


查看完整回答
反对 回复 2023-07-31
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信