我对如何确保对嵌套地图的安全并发访问感到有些困惑。最初我的设置是这样的,我意识到我需要能够锁定至少一张地图。
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
}
我的基本理解如下:如果我想添加一个新Restaurant
的locations
,我需要锁定Manager
。如果我想添加或修改 a Dish
to menu
,我需要 lock Restaurant
,但我不确定是否还需要 lock the Manager
。同样,如果我想从 访问值Manager
,我不确定是否也需要锁定Restaurant
。
我曾尝试(未成功)在使用-race
标志时强制数据竞争,所以我不确定是否Manager
随时锁定Restaurant
已发生变化,并且Restaurant
每次访问Manager
时都需要锁定,或者我是否尝试强制竞争没有奏效。