原子<T*>总是锁定自由吗?

Won*_*ter 4 c++ std c++11 stdatomic

在我的MAC OS上,atomic<T*>是免费的.

#include <iostream>
#include <atomic>

int main() {
    std::cout << std::atomic<void*>().is_lock_free() << std::endl;
    return 0;
}

output: 1
Run Code Online (Sandbox Code Playgroud)

我想知道是否atomic<T*>总是免费锁定?

有参考介绍吗?

vll*_*vll 9

该标准允许使用锁实现任何原子类型(std :: atomic_flag除外).即使平台允许某些类型的无锁原子,标准库开发人员也可能没有实现.

如果在使用锁时需要以不同的方式实现某些内容,可以在编译时使用ATOMIC_POINTER_LOCK_FREE宏来检查.

  • 你也可以使用`if constexpr(std :: atomic_is_lock_free(&obj))`; `ATOMIC_POINTER_LOCK_FREE宏`是为了与C11兼容. (3认同)