基于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
posted @ 2025-10-18 19:26  焦涛  阅读(1)  评论(0)    收藏  举报