基于 CAS的atomic 原子类型。
互斥锁级别是重的,适用于:临界区代码做的事情复杂
但是+±-这种操作,可以用CAS。
CAS通常被称为无锁操作。但是并不是真的不加锁,而是在硬件方面枷锁。给总线上锁。
cpu和内存交换数据,如果没有交换完毕的话,是不允许其他线程使用总线的。
#include<iostream>
#include<list>
#include<mutex>
#include<thread>
#include<queue>
#include<condition_variable>
#include<atomic>
std::atomic_bool f =ATOMIC_FLAG_INIT;
std::atomic_int cnt(0);
void test(){
while(!f){
std::this_thread::yield();//让出当前时间片
}
for(int i=0;i<1000;i++){
cnt++;
}
}
int main(){
f=false;
std::list<std::thread> tlist;
for(int i=0;i<10;i++){
tlist.push_back(std::thread(test));
}
f=true;
for(std::thread &t : tlist){
t.join();
}
std::cout<<cnt<<std::endl;
return 0;
}