亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何安全地將新的鍵值對添加到本地地圖中

如何安全地將新的鍵值對添加到本地地圖中

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 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號