我正在查看 boost Atomic 文档,我遇到了以下示例:
atomic<int> a(0);
thread1:
... /* A */
a.fetch_add(1, memory_order_release);
thread2:
int tmp = a.load(memory_order_acquire);
if (tmp == 1)
{
... /* B */
}
else
{
... /* C */
}
现在我对 memory_order_release 和 memory_order_acquire 仍然有些困惑。文档将它们描述为:
memory_order_release
执行释放操作。通俗地说,防止所有先前的内存操作在这一点之后重新排序。
memory_order_acquire
执行获取操作。通俗地说,防止在此之前对后续的内存操作进行重新排序。
即使有这些例子,我仍然有点困惑。如果有人能解释上述定义的含义以及 A 和 C 如何冲突,我将不胜感激?