出版安全,放松记忆模型和memcpy

时间:2012-10-31 01:07:35

标签: c++ c++11 synchronization x86 memory-model

我想在关于出版物安全的部分中关注this article。我的情况与文章中的简单示例没有什么不同,但“已发布”数据不是单个值,而是struct中的几个字段。发布者将单独编写每个字段,因此通过使用memory_order_release的商店完成每次写入,我应该没问题。

消费者将首先与memory_order_acquire核对数据已准备就绪。然后,我很想使用memcpy将整个已发布的struct复制到其他地方(因为这更适合其他预先存在的代码),但这似乎不是安全,因为我无法指定内存模型。这只是偏执还是一个严重的问题?

特定于amd64 / x86的建议被接受。

1 个答案:

答案 0 :(得分:0)

获取语义意味着程序顺序中的后续加载不会在障碍之前重新排序,无论您在后续加载时请求什么语义。所以我相信在获取障碍之后使用memcpy读取结构是安全的。