【发布时间】:2020-06-10 13:08:19
【问题描述】:
我对如何确保安全地并发访问嵌套地图感到有些困惑。 最初我的设置是这样的,我意识到我需要能够锁定至少一张地图。
map[string]map[string]Dish
经过一番思考,我设想的结构如下所示:
type Manager struct {
mu sync.RWMutex
locations map[string]Restaurant
}
type Restaurant struct {
mu sync.RWMutex
menu map[string]Dish
}
type Dish struct {
name string
price string
vegan bool
}
我的基本理解如下:
如果我想向locations 添加一个新的Restaurant,我需要锁定Manager。
如果我想将Dish 添加或修改为menu,我需要锁定Restaurant,但我不确定是否还需要锁定Manager。
同样,如果我想访问来自Manager 的值,我不确定是否也需要锁定Restaurant。
我已经尝试(未成功)在使用 -race 标志时强制数据竞争,所以我不确定是否随时锁定 Manager Restaurant 发生突变,并且每次访问 @987654337 时锁定 Restaurant @ 是必要的,或者如果我试图强制比赛没有奏效。
【问题讨论】:
-
不应该互斥量作为指针正常工作吗?您最好添加代码以显示您如何锁定并确保您没有锁定不同的互斥锁
-
@AlexanderTrakhimenok : stackoverflow.com/a/28244472/1286423 你应该使用指向互斥体的指针。
标签: dictionary go concurrency nested-map