C++ 线程同步
什么是线程同步
在多线程编程中,线程同步是一个核心概念。当多个线程同时访问共享资源时,如果不采取适当的同步措施,可能会导致数据竞争(data race)和不一致性问题 。线程同步机制提供了一种控制多线程访问共享资源的方法,确保程序正确性。
备注
线程同步是指协调多个线程的执行顺序和共享资源的访问,防止出现数据竞争和不确定的程序行为。
为什么需要线程同步
考虑以下简单的代码示例,其中两个线程同时对一个共享变量进行递增操作:
#include <iostream>
#include <thread>
#include <vector>
int counter = 0;
void increment_counter(int iterations) {
for (int i = 0; i < iterations; ++i) {
// 以下操作不是原子的,实际包含多个步骤:
// 1. 读取counter的值
// 2. 增加1
// 3. 将结果写回counter
counter++;
}
}
int main() {
const int iterations = 1000000;
std::thread t1(increment_counter, iterations);
std::thread t2(increment_counter, iterations);
t1.join();
t2.join();
std::cout << "Expected: " << iterations * 2 << std::endl;
std::cout << "Actual: " << counter << std::endl;
return 0;
}
输出(可能的结果):
Expected: 2000000
Actual: 1237546
你会发现最终的结果小于预期值。这是因为 counter++
操作不是原子的,当两个线程同时执行递增操作时会出现数据竞争,导致某些递增操作被"丢失"。