什么是原子变量

一、什么是原子变量(Atomic Variable)?

在多线程程序中,多个线程可能会同时访问和修改同一个变量。例如,两个线程都想给一个计数器加1,如果没有妥善处理,就可能出现“丢失更新”的情况:两个线程都读取到相同的数值,然后都+1,最后就只有一个加了1,实际上应该加了2。

原子变量就像“神奇的变量”,保证在多个线程同时操作时,每次操作都完整、不可被打断,就像是一只看得见的透明“锁”,不让其他操作干涉。

总结:

原子变量确保在多线程环境下,每次读/写操作都是完整不可中断的,避免竞态条件。


二、C++11中的原子变量是什么?怎么用?

在C++11标准中,核心工具是  头文件。它定义了模板类 std::atomic,用于创建原子变量。

基本使用方式:

#include 
#include 
#include 

int main() {
    std::atomic counter(0); // 初始化原子变量,初始值为0

    auto increment = [&]() {
        for(int i=0; i<10000; ++i) {
            counter++; // 原子自加
        }
    };

    std::thread t1(increment);
    std::thread t2(increment);

    t1.join();
    t2.join();

    std::cout << "Counter: " << counter << std::endl; // 输出应为20000
}

在这个例子中,两个线程同时对 counter 增加10000次,没有丢失数据,最后输出就是20000。


三、原子变量的关键操作和概念

1. 初始化

可以在声明时初始化,也可以之后赋值。

std::atomic a(10);       // 直接初始化值10
std::atomic b;           // 默认初始化,值未定义(但一般会初始化为0)
b.store(5);                   // 可

你可能感兴趣的:(算法,数据结构)