![](/img/trans.png)
[英]How to use std::atomic<T>::is_always_lock_free for SFINAE?
[英]Is atomic<T*> always lock free?
在我的MAC OS上, atomic<T*>
是无锁的。
#include <iostream>
#include <atomic>
int main() {
std::cout << std::atomic<void*>().is_lock_free() << std::endl;
return 0;
}
output: 1
我想知道atomic<T*>
是否总是无锁?
有参考介绍吗?
该标准允许使用锁实现任何原子类型(std :: atomic_flag除外)。 即使平台允许某些类型的无锁原子,标准库开发人员也可能没有实现。
如果在使用锁时需要以不同的方式实现某些内容,可以在编译时使用ATOMIC_POINTER_LOCK_FREE
宏来检查。
不,假设任何特定平台的std::atomic
实现总是无锁是不安全的。
该标准指定了一些标记宏,包括ATOMIC_POINTER_LOCK_FREE
,它指示对于所讨论的平台,指针永远不会,有时或总是无锁。
您还可以从std::atomic<T *>::is_always_lock_free
获取特定T
的答案。 1
注1:给定的指针类型必须一致 ,因此实例方法std::atomic<T *>::is_lock_free()
是多余的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.