参考来源:ttps://baptiste-wicht.com/posts/2012/07/c11-concurrency-tutorial-part-4-atomic-type.html
本文介绍c++并发库中的原子类型: Atomic types.
1. Atomic Types
struct Counter { int value; void increment(){ ++value; } void decrement(){ --value; } int get(){ return value } };
我们可以看到这个类在多线程环境中使用不是很安全。我们可以使用互斥锁来使得这个类的安全。
将介绍原子类型。原子类型的主要的优势是它的操作,这个std::atomic操作的执行无需锁操作并且比锁操作更快。
C++11并发库将原子类型作为一个模板类 std::atomic。你可以用模板实现任何你想要的类型,实现原子操作和线程安全。
主要函数std::atomic提供的是store和load函数,能够实现原子设置和得到std::atomic的内容。
另一个有趣的函数是exchange,能够给atomic设置一个新的值并且返回atomic的之前的值。
最后,还有两个函数compare_exchange_weak和compare_exchange_strong能够在这个值和提供的期望值相等时执行原子交换。
最后这两个函数在无锁算法中能被执行。
std::atomic时专门为所有的整数类型提供成员函数。
很容易使得Counter类安全使用std::atomic。
#include <atomic> struct AtomicCounter { std::atomic<int> value; void increment(){ ++value; } void decrement(){ --value; } int get(){ return value.load(); } };
建议在需要的时候使用std::atomic去做原子操作,尤其在对整数类型做处理时。