我试图了解更多关于C11原子的知识,不明白为什么我会使用__atomic_load_n而不是__atomic_load。文档简单地说明了其中一个是通用的,但是用法看起来是一样的:
内置函数:类型__atomic_load_n (类型*ptr,int )这个内置函数实现原子加载操作。它返回*ptr的内容。 有效的内存顺序变体是__ATOMIC_RELAXED、__ATOMIC_SEQ_CST、__ATOMIC_ACQUIRE和__ATOMIC_CONSUME。 内置函数: void (type * __atomic_load,type *ret,int )--这是原子加载的通用版本。它在*ret中返回*ptr的内容。
发布于 2019-08-14 04:04:10
他们的功能相同,内部GCC,他们是在方便和明确的基础上使用。
如果您有一个要原子加载数据的指针,那么这样做是有意义的:
__atomic_load(__ptr, __dest, mem_order);如果您有一个值,或者您试图从一个函数返回,那么这样做是有意义的:
return __atomic_load_n(__ptr, mem_order)显然,它们是同构的,在应用程序代码中,您应该使用<stdatomic.h>而不是编译器内置提供的标准函数。
https://stackoverflow.com/questions/57487647
复制相似问题