有一个 parm 读得更多,写得更少,而且我不想使用互斥体。我通过 unsafe
和 atomic
完成了它:
type tmp struct {
}
var value unsafe.Pointer
func GetValue() *tmp {
return (*tmp)(atomic.LoadPointer(&value))
}
func SetValue(p *tmp) {
atomic.StorePointer(&value, unsafe.Pointer(p))
}
这是线程安全的吗?和atomic.StorePointer发生在
atomic.LoadPointer之前?
最佳答案
从某种意义上说,它将是线程安全的,您不知道首先发生什么,但更新是原子的。您是否考虑过使用 RWMutex 来代替?除非正在进行写入,否则不会锁定读取器。
关于go - 使用原子而不是线程是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27616037/