【发布时间】:2015-01-06 05:15:14
【问题描述】:
是否需要始终配对 Acquire 和 Release 屏障?是否有任何真实情况可能在没有相应对的情况下发生(包括满足两者的完整记忆障碍)?我知道 C++11 内存模型声明此类未配对程序不是无数据竞争的,但情况总是如此吗?
例如linux kernel's documentation on memory barriers states:
ACQUIRE 操作应该几乎总是与 RELEASE 配对 操作。
为什么说“几乎总是”而不是“总是”?
【问题讨论】:
-
这意味着您通常应该进行配对,而不是试图找到边缘情况。如果您需要边缘情况,当您尝试编写需要它的代码时,它会变得很明显。
-
@RobertHarvey:并不是说我不欣赏你的评论,而是一个特定的代码示例,其中这种边缘情况是合法的,甚至是最常见的情况,将有助于理解重申我的直觉的障碍和帮助:)
标签: c++ multithreading c++11 linux-kernel atomic