原子量简而言之就是不需要锁,在不同线程间可以同步的变量;
原子模板的每个实例化和完全专门化都定义了一个原子类型。如果一个线程写入一个原子对象,而另一个线程从中读取,则行为是定义良好的(有关数据竞争的详细信息,请参阅内存模型)。
另外,对原子对象的访问可以建立线程间同步,并按std::memory_order指定的顺序对非原子内存访问进行排序。
1、使用做标志位,阻塞线程:
#include <vector>
#include <atomic>
#include <iostream>
#include <chrono>
#include <thread>
std::vector<int> data;
std::atomic_bool data_ready(false);
void reader_thread()
{
while(!data_ready.load())
{
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
std::cout<<"The answer="<<data[0]<<"\n";
}
void writer_thread()
{
data.push_back(42);
data_ready=true;
}
参考: