我想在关于出版物安全的部分中关注this article。我的情况与文章中的简单示例没有什么不同,但“已发布”数据不是单个值,而是struct
中的几个字段。发布者将单独编写每个字段,因此通过使用memory_order_release
的商店完成每次写入,我应该没问题。
消费者将首先与memory_order_acquire
核对数据已准备就绪。然后,我很想使用memcpy
将整个已发布的struct
复制到其他地方(因为这更适合其他预先存在的代码),但这似乎不是安全,因为我无法指定内存模型。这只是偏执还是一个严重的问题?
特定于amd64 / x86的建议被接受。
答案 0 :(得分:0)
获取语义意味着程序顺序中的后续加载不会在障碍之前重新排序,无论您在后续加载时请求什么语义。所以我相信在获取障碍之后使用memcpy读取结构是安全的。