__atomic_load_n 和 __atomic_load 之间的区别
Posted
技术标签:
【中文标题】__atomic_load_n 和 __atomic_load 之间的区别【英文标题】:Difference between __atomic_load_n and __atomic_load 【发布时间】:2019-08-14 03:00:01 【问题描述】:我正在尝试了解有关 C11 原子的更多信息,但不明白为什么我会使用 __atomic_load_n
而不是 __atomic_load
。文档只是说一个是通用的,但用法看起来是一样的:
内置函数:type __atomic_load_n (type *ptr, int memorder) 这个内置函数实现了原子加载操作。它返回 *ptr 的内容。
有效的内存顺序变体是 __ATOMIC_RELAXED、__ATOMIC_SEQ_CST、__ATOMIC_ACQUIRE 和 __ATOMIC_CONSUME。
内置函数:void __atomic_load (type *ptr, type *ret, int memorder) 这是原子负载的通用版本。它返回 *ret 中 *ptr 的内容。
https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
【问题讨论】:
【参考方案1】:它们的功能相同,并且在 GCC 内部使用它们是基于方便和清晰。
如果你有一个指针想要以原子方式加载数据,这样做是有意义的:
__atomic_load(__ptr, __dest, mem_order);
如果你有一个值或者你试图从一个函数中返回,那么这样做是有意义的:
return __atomic_load_n(__ptr, mem_order)
显然它们是同构的,在应用程序代码中,您应该使用<stdatomic.h>
提供的标准函数而不是编译器内置函数。
【讨论】:
哦,我现在看到函数签名的不同了。谢谢。以上是关于__atomic_load_n 和 __atomic_load 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
描述符(\_\_get\_\_和\_\_set\_\_和\_\_delete\_\_)
__setattr__和__delattr__和__getattr__
Python-__init__ 和 __new__区别和原理