最好的(即快速和小)是 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::atomic
、std::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 个字节?
VMware安装的Linux Fedora , 关于gcc 的问题