原子类型提供了一个成员函数is_lock_free,用于指示该原子类型是不是以无锁方式实现的:
#include <iostream>
#include <atomic>
using namespace std;int main(){cout<<atomic_char().is_lock_free()<<endl;cout<<atomic_int().is_lock_free()<<endl;return 0;
}运行程序输出:
1
1
同时原子类型提供了一个编译器常量静态成员is_always_lock_free
static constexpr bool is_always_lock_free
用于指示,该原子类型是不是总是以无锁方式实现的。
#include <iostream>
#include <atomic>
using namespace std;int main(){cout<<atomic_char::is_always_lock_free<<endl;cout<<atomic_int::is_always_lock_free<<endl;return 0;
}运行程序输出:
1
1
需要注意的是由于is_always_lock_free是编译期常量,所以只有当所有的平台上都是以无锁方式实现的原子操作时才会返回true。