什么是“原子变量”?
原子变量(std::atomic
)在C++中是一个非常关键的机制,特别是在多线程编程中保持数据安全和避免竞争条件。它的设计目标就是让一段操作在多线程环境下变得“原子性”,即不可被中断,保证操作的完整与一致。
一、什么是“原子变量”?
简单来说:
-
普通变量:在多线程环境中,多个线程同时操作一个普通变量容易引起“竞态条件”(race condition),导致数据损坏或错误(比如两个线程同时改内容,最后结果不正确)。
-
原子变量:通过特殊的机制保证“某个变量”的某个操作,从开始到结束不可被其他线程打断,就像一支笔写字,写完一行才会有别的线程开始写。
用一个比喻:
你在写字,如果只有你一人写,保持正确很容易——这是普通操作。
但如果多人用一支笔共同写一幅画,你需要确保“写一笔”这个操作不被打断,比如“涂红色一块”必须完整完成,别人才能开始下一步,这是“原子操作”。
二、标准库中std::atomic
的基本介绍
- 定义:
std::atomic<T>
是C++11提供的模板类,可以用来定义支持原子操作的数据类型。 - 作用:确保对变量的操作在多线程环境下一致、原子。
示例: