is_lock_free<T> gcc 4.7.2 中的 std::atomic 中没有定义?

is_lock_free not defined in std::atomic<T> in gcc 4.7.2?

本文关键字:atomic std 定义 中的 lt free lock gt is gcc      更新时间:2023-10-16

我遇到这个编译错误

<>之前函数std::atomic::is_lock_free() const: error:未定义引用"__atomic_is_lock_free"之前

在linux上使用GCC 4.7.2编译下面的代码。

struct S {
  int a;
  int b;
};

  std::atomic<S> s;
  cout << s.is_lock_free() << endl;

原子API在GCC 4.7中不完整:

  • 当无锁指令不可用时(无论是通过硬件还是操作系统支持),原子操作将作为函数调用留给库来解析。由于时间限制和一个尚未最终确定的API, GCC 4.7没有提供libatom。这很容易通过遇到以__atomic_*开头的不满意的外部符号来确定。

由于GCC 4.7没有附带libatomic,您需要使用另一个真正支持您想要的功能或提供缺失功能(示例实现)的编译器。