1

在 Ubuntu 12.04 系统上,当我尝试编译以下代码时:

#include <atomic>
int a;
int main()
{
  a = 0;
  std::atomic_thread_fence(std::memory_order_acquire);
  a = 1;
}

我收到一条错误消息,例如:

g++ test.cpp -std=c++0x 
/tmp/ccayKntC.o: In function `main': test.cpp:(.text+0x14): undefined reference to `std::atomic_thread_fence(std::memory_order)' collect2: ld returned 1 exit status

编译时clang++也会发生这种情况。由于这是一个链接器错误,我猜我的 libstdc++ 版本缺少必要的功能。但是,其他原子操作似乎也有效。

我正在使用 Ubuntu 12.04。我想知道我的系统设置是否有问题,是否是我的 libstdc++ 中缺少的功能,或者可能是其他原因。理想情况下,我希望能够解决这个问题。

4

1 回答 1

2

这实际上是在 4.7 分支中修复的错误:

我认为您需要使用__sync_synchronize或类似的东西__asm__ __volatile__ ( "mfence" ::: "memory" )

有些人喜欢对自己需要哪些同步操作非常严格,但我认为mfence一直使用对于常见情况就足够了。

于 2013-05-08T02:47:18.023 回答