gpt4 book ai didi

go - 尽量减少对 map 的锁定——尽快锁定单个项目

转载 作者:IT王子 更新时间:2023-10-29 01:41:20 25 4
gpt4 key购买 nike

我想最小化项目 map 上的锁,一旦检索到相关项目就可以单独锁定。

这让我相信

var Mymap struct {
sync.Mutex
m map[string]*Somestruct
}

type Somestruct struct {
sync.Mutex
Someval string
}

可以这样使用:

Mymap.Lock()
if val, ok := Mymap.m.[needle]; ok {
Mymap.m.[needle].Lock()
Mymap.Unlock()
// do something to this entry
Mymap.m.[needle].Unlock()
}
Mymap.Unlock()

...但据我所知,Unlock() 在已经 Unlocked 上不是空操作:

panic: sync: unlock of unlocked mutex

根据 https://groups.google.com/forum/#!topic/Golang-Nuts/GeHbpo6AtTc我看到没有办法检查它是否真的被 Unlocked。

我应该在某处保持“锁定”状态还是有比这更好的方法:

var unlocked bool

Mymap.Lock()
if val, ok := Mymap.m.[needle]; ok {
Mymap.m.[needle].Lock()
Mymap.Unlock()
unlocked := true

// do something to this entry
Mymap.m.[needle].Unlock()
}

if !unlocked {
Mymap.Unlock()
}

最佳答案

Mymap.Lock()
if val, ok := Mymap.m.[needle]; ok {
Mymap.m.[needle].Lock()
Mymap.Unlock()
// do something to this entry
Mymap.m.[needle].Unlock()
} else {
Mymap.Unlock()
}

关于go - 尽量减少对 map 的锁定——尽快锁定单个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46145728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com