C++多线程基础-atomic

原子量简而言之就是不需要锁,在不同线程间可以同步的变量;

原子模板的每个实例化和完全专门化都定义了一个原子类型。如果一个线程写入一个原子对象,而另一个线程从中读取,则行为是定义良好的(有关数据竞争的详细信息,请参阅内存模型)。

另外,对原子对象的访问可以建立线程间同步,并按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;
}

参考:

std::atomic - cppreference.com

猜你喜欢

转载自blog.csdn.net/KPer_Yang/article/details/130041709