C++ 中原子操作确保多线程并发执行中共享数据的完整性。它提供:std::atomic<T>:为基础数据类型提供原子操作。std::atomic_flag:原子布尔标志,指示特定条件是否为真。std::atomic_ref<T>:原子引用,允许并发线程访问共享对象。
C++ 多线程编程中的原子操作
在多线程编程中,原子操作是指不可被中断的操作,它可以确保在多线程并发执行的情况下,共享数据的完整性。C++ 中提供了以下几种原子操作:
实战案例:
假设有一个共享变量 x
,初始值为 0。多个线程并发对 x
进行递增操作。如果不使用原子操作,就会出现数据竞争,导致 x
的最终值不准确。
以下代码使用 std::atomic<int>
保证 x
的递增操作是原子性的:
#include <atomic> #include <thread> std::atomic<int> x = 0; void increment_x() { for (int i = 0; i < 100000; i++) { x++; } } int main() { std::thread t1(increment_x); std::thread t2(increment_x); t1.join(); t2.join(); std::cout << "最终 x 值:" << x << std::endl; return 0; }
输出结果:
最终 x 值:200000