2

我正在尝试在有关发布安全的部分中关注这篇文章。我的情况与文章中的简单示例没有什么不同,但“发布”的数据不是单个值,而是一个struct. 发布者将单独编写每个字段,因此通过将每个写入与存储一起包装memory_order_release我应该没问题。

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

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

4

1 回答 1

0

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

于 2012-10-31T01:13:18.347 回答