最基本的原子整数类型就是std::atomic
1 | std::atomic<bool> ready(ture); |
在原子类型中,赋值操作通过返回值(返回相关的非原子类型)完成,而非返回引用。std::atomic也支持对值的普通查找,其会将对象隐式转换为一个普通的类型值,或者调用load()函数来获取这个类型值。store()是一个存储操作,load()是一个加载操作即读取操作。exchange()则是一个“读-改-写”操作,当前值与预期值一致时,存储新值的操作:
1 | std::atomic<bool> ready(ture); |
还有就是比较/交换操作,compare_exchange_weak()和compare_exchange_strong()成员函数,这个操作时原子类型编程的基础:它比较原子变量的当前值和预期值,当两者相等时,存储预期值。当两者不等时,预期值会被更新为原子变量中的值,此操作的结果时一个bool值,为true执行存储操作,为false则更新期望值。但是对于compare_exchange_weak()函数,当原始值与预期值一致时,存储也有可能会失败。
原子指针类型,可以使用内置类型或自定义类型T,通过特化std::atomic<T*>进行定义,虽然接口和std::atomic
使用原子类型的一个示例程序如下:
1 |
|