C++_atomic_flag

发布时间:2026/7/2 18:51:00
C++_atomic_flag C_atomic_flag介绍std::atomic_flag是C并发编程中最简单的原子类型位于atomic头文件中。它表示一个布尔标志位只能处于两种状态之一设置true 或 清除false。特性保证无锁lock-free它是C标准库中唯一保证无锁的原子类型所有操作都不需要互斥锁支持。操作不可分割所有操作都是原子的不会被其他线程中断。不可拷贝、不可移动不能拷贝构造或赋值给另一个atomic_flag。功能极简只提供两个基本操作——test_and_set()和clear()。核心操作test_and_set()将标志位设置为true并返回设置之前的旧值。boolold_valueflag.test_and_set(std::memory_order_seq_cst);返回值设置前的旧值true 或 false默认内存序memory_order_seq_cst属于读-改-写操作可以指定任意内存序clear()将标志位设置为 false。flag.clear(std::memory_order_seq_cst);无返回值属于存储操作不能使用 memory_order_acquire 或 memory_order_acq_rel线程自旋锁案例程序创建了 10 个线程每个线程循环 10 次输出信息。通过atomic_flag实现的自旋锁来保证同一时刻只有一个线程能执行输出操作避免多个线程的输出内容交错混乱。#includeiostream#includeatomic#includethread#includevectorusingnamespacestd;// ATOMIC_FLAG_INIT 定义能语句用于初始化操作标志清除状态的初始化器。atomic_flag lockATOMIC_FLAG_INIT;voidFuncAt(intargs){for(inti0;i10;i){while(lock.test_and_set(memory_order_acquire));// 获得锁coutOutput Threads:iendl;lock.clear(memory_order_release);// 释放锁}}intmain(){vectorthreadvet;for(inti0;i10;i){vet.emplace_back(FuncAt,i);}for(autot:vet){t.join();}return0;}