__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__区别和原理

默认类型 .__call__ 是不是比调用 __new__ 和 __init__ 更多?

\_\_init\_\_和\_\_new\_\_