是否有必要始终配对获取和释放障碍?是否有任何真实的情况,如果没有相应的对可能会发生(包括满足两者的完整记忆障碍)?我知道C ++ 11内存模型表明这些不成对的程序不是Data Race Free,但总是这样吗?
例如,linux kernel's documentation on memory barriers states:
ACQUIRE操作应该几乎总是与RELEASE配对 操作
为什么说“几乎总是”而不是“总是”?
答案 0 :(得分:1)
典型的边缘情况是指 2 ACQUIRE
与单个RELEASE
匹配。不是严格配对,但这可能会简化一些代码流,否则你需要保留标记说ACQUIRE
正在等待。
答案 1 :(得分:0)
如果我正确理解dispatch_once source code在性能方面省略了读取障碍。
您可以在此blog
中找到更多信息