go - 使用原子而不是线程是线程安全的吗?

标签 go

有一个 parm 读得更多,写得更少,而且我不想使用互斥体。我通过 unsafeatomic 完成了它:

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/

相关文章:

go - 如何在golang中设置获取大小?

戈朗 : how to handle blocking tasks optimally?

rest - 使用 golang 通过 rest 端点将文件从客户端复制到服务器

google-app-engine - 如何使用 gcloud 将具有依赖关系的 golang 应用程序部署到应用程序引擎?

postgresql - 如何在 Postgresql 时间戳中存储 Golang time.time?

mongodb - 带有重试的 Mongo go 驱动程序事务实现

mongodb - 仅在使用 golang 实现查询时使用聚合查询中的空白数据

recursion - 我如何阻止(和加入)由未知数量的 goroutines 提供的 channel ?

java - grpc 示例是否旨在跨语言交流?

go - 在一个变量中存储 2 个值