最好的(即快速和小)是 GCC linux 上的 atomic_fetch_ptr 和 atomic_set_ptr

Posted

技术标签:

【中文标题】最好的(即快速和小)是 GCC linux 上的 atomic_fetch_ptr 和 atomic_set_ptr【英文标题】:What is the best ( ie fast and small ) was to atomic_fetch_ptr and atomic_set_ptr on GCC linux 【发布时间】:2018-01-03 05:09:25 【问题描述】:

在 GCC linux 中有一堆快速内存屏障原子操作,比如 __sync_fetch_and_and 等

我想在内存中获取并设置一个指针值,以便在获取时保证​​它是设置的值,因为有时赋值指令不是原子的。我不想要一个重量级的互斥锁,因为它太胖了。

最好的方法是什么?

【问题讨论】:

我认为平台也很重要。我似乎记得有些东西在 Aarch64 上的实现方式不同或缺失。另请参阅 GCC 邮件列表中的 GCC inline assembly and the removal of -mcx16。 【参考方案1】:

不要在 GCC 中使用原子建筑。为您的目的使用std::atomicstd::atomic_compare_exchange_*。谷歌他们https://cppreference.com。

在类似问题Which is more efficient, basic mutex lock or atomic integer?的答案中,您可以学到最好的知识

【讨论】:

某种答案 :) 为什么 GCC 内在函数除了是编译器特定的内联代码之外还不好?我认为他们对 std:atomic 的实现是围绕它们的模板化包装器。

以上是关于最好的(即快速和小)是 GCC linux 上的 atomic_fetch_ptr 和 atomic_set_ptr的主要内容,如果未能解决你的问题,请参考以下文章

为啥 gcc 4.x 在调用方法时默认为 linux 上的堆栈保留 8 个字节?

如何快速为虚拟机Linux安装gcc

VMware安装的Linux Fedora , 关于gcc 的问题

请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)

如何linux安装gcc

如何将使用sysioctl.h的代码移植到MinGW gcc中?