在没有其他匹配障碍的情况下,是否存在获取或释放障碍的情况?

时间:2015-01-06 05:15:15

标签: c++ multithreading c++11 linux-kernel atomic

是否有必要始终配对获取和释放障碍?是否有任何真实的情况,如果没有相应的对可能会发生(包括满足两者的完整记忆障碍)?我知道C ++ 11内存模型表明这些不成对的程序不是Data Race Free,但总是这样吗?

例如,linux kernel's documentation on memory barriers states

  

ACQUIRE操作应该几乎总是与RELEASE配对        操作

为什么说“几乎总是”而不是“总是”?

2 个答案:

答案 0 :(得分:1)

典型的边缘情况是指 2 ACQUIRE与单个RELEASE匹配。不是严格配对,但这可能会简化一些代码流,否则你需要保留标记说ACQUIRE正在等待。

答案 1 :(得分:0)

如果我正确理解dispatch_once source code在性能方面省略了读取障碍。

您可以在此blog

中找到更多信息