我知道英特尔的 TBB 中存在类似的模板,此外我在 google 或 Boost 库中找不到任何实现。
yabcok
问问题
6532 次
1 回答
14
您可以在 boost 中找到有关此功能实现的讨论:http: //lists.boost.org/Archives/boost/2008/11/144803.php
> 能否实现 N2427 - C++ 原子类型和操作
> 没有编译器的帮助?
不。
如果您可以编写内联汇编程序(或就此而言单独编译的汇编程序),它们不需要是内在函数,那么您可以直接自己编写操作。您甚至可以使用简单的 C++(例如,只是简单的加载或存储分配)。您需要编译器支持的原因是防止不适当的优化:原子操作无法优化,通常不得在任何其他操作之前或之后重新排序。这意味着即使在原子存储之前执行的非原子存储也必须完成,并且不能缓存在寄存器中(例如)。此外,原子操作之后发生的负载不能在原子操作之前提升。在某些编译器上,仅使用内联汇编程序就足够了。在其他情况下,调用外部函数就足够了。MSVC 提供 _ReadWriteBarrier() 来提供编译器排序。其他编译器需要其他标志。
于 2009-02-07T14:22:26.543 回答