首页 > 文章列表 > C++ 多线程编程中原子操作有哪些?

C++ 多线程编程中原子操作有哪些?

c++ 原子操作
188 2025-02-21

C++ 中原子操作确保多线程并发执行中共享数据的完整性。它提供:std::atomic<T>:为基础数据类型提供原子操作。std::atomic_flag:原子布尔标志,指示特定条件是否为真。std::atomic_ref<T>:原子引用,允许并发线程访问共享对象。

C++ 多线程编程中原子操作有哪些?

C++ 多线程编程中的原子操作

在多线程编程中,原子操作是指不可被中断的操作,它可以确保在多线程并发执行的情况下,共享数据的完整性。C++ 中提供了以下几种原子操作:

  • std::atomic<T>:原子数据类型,用于为基础数据类型(如 int、double)提供原子操作。
  • std::atomic_flag:一个原子布尔标志,用于指示一个特定条件是否为真。
  • std::atomic_ref<T>:原子引用,允许并发执行多个线程对单个共享对象的访问。

实战案例:

假设有一个共享变量 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