我想從并發線程向 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 關注
- 140 瀏覽
添加回答
舉報
0/150
提交
取消