基于CAS操作的atomic原子类型
#include<list>
#include<thread>
#include<iostream>
#include<chrono>
#include <mutex>
#include <atomic>
/*
C++ 11
窗口卖票 int cout=100;
lock_guard<std::mutex> guard(mtx);
cout++
lock_guard<std::mutex> guard(mtx);
cout--
互斥锁是比较重的,临界区代码做的事情稍稍稍稍复杂
多系统理论:CAS来保证上面的++或--操作的原子特性就足够了,
无锁操作通过exchange/swap来达到的。无锁队列也是CAS实现的
CAS(Compare and Swap)是一种CPU硬件同步原语,通过原子操作实现多线程环境下的无锁同步.
*/
volatile std::atomic_bool isReady = false;//volatile的作用:所有线程对共享变量不进行缓存
volatile std::atomic_int cout = 0;
void task()
{
while (!isReady)
{
//线程出让当前的CPU时间片,等待一下此调度
std::this_thread::yield();
}
for (int i = 0;i < 100;++i)
{
cout++;
}
}
int main()
{
std::list<std::thread> tlist;
for (int i = 0;i < 10;i++)
{
tlist.push_back(std::thread(task));
}
std::this_thread::sleep_for(std::chrono::seconds(3));
isReady = true;
for (std::thread& t : tlist)
{
t.join();
}
std::cout << "count:" << cout << std::endl;
}
输出结果
count:1000
浙公网安备 33010602011771号