c++2011标准
atomic
原子模板
封装了一个值的类型,可以用于在多线程之间同步内存访问。
atomic_flag
atomic 模板类
std::atomic_bool std::atomic<bool>
std::atomic_int std::atomic<int>
//fast指的是64bit系统使用32bit时会比较慢,所以用64bit整数
std::atomic_int_fast32_t std::atomic<int_fast32_t>
std::atomic_flag 相当于一个无锁的mutex.
lock-free
std::atomic_flag lock = ATOMIC_FLAG_INIT;
while (lock.test_and_set(std::memory_order_acquire)) // acquire lock
; // spin
...
lock.clear(std::memory_order_release); // release lock
函数
//store 存储操作
template< class T >
void atomic_store_explicit( std::atomic<T>* obj,
typename std::atomic<T>::value_type desr,
std::memory_order order) noexcept;
//load 加载操作
template< class T >
T atomic_load_explicit( const std::atomic<T>* obj,
std::memory_order order ) noexcept;
template< class T >
//原子操作,desr替换obj中包含的值,并返回obj之前的值
T atomic_exchange_explicit( std::atomic<T>* obj,
typename std::atomic<T>::value_type desr,
std::memory_order order ) noexcept;
//原子操作,将arg和到obj中所包含的值做add 操作,返回之前的值,整数就是相加
T atomic_fetch_add_explicit( std::atomic<T>* obj,
typename std::atomic<T>