gpt4 book ai didi

go - 我应该在嵌套结构上使用 sync.Mutex 还是只在父结构上使用?

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

我想知道在示例中我应该把互斥量放在哪里?或者两个结构都应该有一个互斥体?

我有用于操作 *Device 的 setters/getters,我有一个将 Devices 添加到我的 State 结构的函数。

type State struct {
Devices map[string]*Device
//Should the sync.Mutex be here?
}

func (s *State) AddDevice(id [4]byte, name string, features []string, state string) {
d := NewDevice(id, name, state, "", features)

s.Devices[d.Id()] = d
}

func NewState() *State {
return &State{make(map[string]*Device)}
}
type Device struct {
//Or Should the sync.Mutex be here?
SenderId string
Name string
State string
Type string
Features []string
EEPs []string
Power int64
PowerUnit string
}

func (d *Device) Power() int64 {
return d.Power
}
func (d *Device) SetPower(p int64) {
d.Power = p
}

func NewDevice(id [4]byte, name, state, dtype string, features []string) *Device {
d := &Device{Name: name, State: state, Type: dtype}
d.SetId(id)
return d
}

最佳答案

实际上您应该有 2 个不同的 Mutex(是复数吗?),一个用于保护 map 访问,一个用于设备。

启动几个 Go 例程在 map 和设备上执行操作,然后使用 go run -race *.gogo build -race 运行程序,99%有时它会准确显示您需要使用锁的位置。

我建议浏览 Race Detector文档。

关于go - 我应该在嵌套结构上使用 sync.Mutex 还是只在父结构上使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26211963/

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