C++多线程

C++的atomic库和thread库是多线程编程中常用的库,提供了安全的并发操作支持。

1. thread

This link

2. atomic

<atomic>库主要提供了原子操作(atomic operations),即无需锁机制即可实现的线程安全操作。这对提高多线程环境下的数据一致性和性能很有帮助。

常见的原子类型

  • std::atomic<T>:提供一种基础原子类型,T可以是整型、指针等。常见类型如std::atomic<int>std::atomic<bool>等。
  • std::atomic_flag:最简单的原子布尔类型,适用于实现简单的锁(如自旋锁)。

原子操作的基本方法

  • store(value):原子地存储一个值。
  • load():原子地加载一个值。
  • exchange(value):原子地将变量的值设置为value,并返回先前的值。
  • compare_exchange_strong(expected, desired)compare_exchange_weak(expected, desired):原子比较并交换操作,根据当前值与expected是否相等决定是否替换为desired
  • fetch_add(value)fetch_sub(value)fetch_or(value)等:执行加、减、或等操作并返回旧值。

原子变量的示例

#include <iostream>
#include <atomic>
#include <thread>

std::atomic<int> counter(0);

void increment() {
    for (int i = 0; i < 1000; ++i) {
        counter.fetch_add(1); // 原子增加操作
    }
}

int main() {
    std::thread t1(increment);
    std::thread t2(increment);

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

    std::cout << "Final counter value: " << counter.load() << std::endl;
    return 0;
}