c++ - `__atomic_compare_exchange` 在 g++ 源代码中的哪里定义?

标签 c++ atomic

在我的系统中文件 /usr/include/c++/4.9/atomic 下的 g++ 源代码中,函数 atomic::compare_exchange_strong 具有以下主体。

  bool
  compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s, 
              memory_order __f) noexcept
  {
return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f); 
  }

但是,该文件仅包含 bits/atomic_base.h,并且我在此文件中没有找到 __atomic_compare_exchange 的定义。

__atomic_compare_exchange在哪里定义?

最佳答案

__atomic_compare_exchange 是内置编译器。它实际上并没有在任何地方的头文件中定义——编译器本身知道它是什么。

在 GCC 源代码本身中,它在 sync-builtins.def 中声明。 。我不熟悉 GCC 的源代码,所以我不确定它是如何渗透到特定于体系结构的实现的(尽管它似乎可能通过 maybe_emit_atomic_exchange ),但是例如的源代码代表它的 x86 指令可以在另一个名为 sync.md 的特定于平台的生成器文件中找到。 :

(define_insn "atomic_exchange<mode>"
  [(set (match_operand:SWI 0 "register_operand" "=<r>")     ;; output
    (unspec_volatile:SWI
      [(match_operand:SWI 1 "memory_operand" "+m")      ;; memory
       (match_operand:SI 3 "const_int_operand")]        ;; model
      UNSPECV_XCHG))
   (set (match_dup 1)
    (match_operand:SWI 2 "register_operand" "0"))]      ;; input
  ""
  "%K3xchg{<imodesuffix>}\t{%1, %0|%0, %1}")

关于c++ - `__atomic_compare_exchange` 在 g++ 源代码中的哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37582035/

相关文章:

c++ - SDL2 纹理操作教程无法执行 - Lazy Foo http ://lazyfoo.net/tutorials/SDL/40_texture_manipulation/index.php

ios - 了解 Xcode 崩溃消息和 @synchronized 指令

java - 如何对 MongoDB 文档的字段执行原子更新?

c - 在拥有带有信号处理程序的多线程程序时,有没有办法确保原子性?

c++ - 忙于轮询 std::atomic - msvc 优化了循环 - 为什么以及如何防止?

c++ - 我需要将对象 vector 或括号括起来的列表传递给构造函数的选项

c++ - 如何使用阻塞套接字 API 添加消息发送操作 (smtp) 的进度?

C++11:为什么 std::condition_variable 使用 std::unique_lock?

c++ - 如何在 C++ 中将动态二维字符串数组作为参数传递

go - 如何在 Go 中将 time.Time 变量转换为原子变量?