我知道英特尔的TBB中存在类似的模板,除了我在谷歌或Boost库中找不到任何实现。
答案 0 :(得分:14)
您可以在此处找到有关此功能实现的讨论:http://lists.boost.org/Archives/boost/2008/11/144803.php
>可以实现N2427 - C ++原子类型和操作
>没有编译器的帮助?
没有。
如果您可以编写内联汇编程序(或单独编译的汇编程序),则它们不需要是内在函数 那件事)那你就可以写了 直接操作本身。您 甚至可以使用简单的C ++ (例如,只是简单的负载分配 或商店)。你需要的原因 编译器支持正在阻止 不恰当的优化:原子 操作无法优化,并且 一般不得重新订购 在任何其他操作之前或之后。 这意味着即使是非原子的 在原子之前执行的商店 商店必须完整,而不能 被缓存在寄存器中(例如)。 此外,在之后发生的负载 原子操作无法悬挂 在原子运动之前。一些 编译器,只使用内联汇编程序 足够。在其他人,称呼 外部功能就足够了。 MSVC 提供 _ReadWriteBarrier()提供编译器排序。其他编译器 需要其他旗帜。