#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int count = 0;
void increment() {
for (int i = 0; i < 1000000; ++i) {
mtx.lock();
++count;
mtx.unlock();
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << "Final count: " << count << std::endl;
return 0;
}
关键步骤解释
- 定义互斥锁和共享变量:
std::mutex mtx;
定义了一个互斥锁 mtx
,用于保护共享资源。
int count = 0;
定义了共享变量 count
,两个线程将同时对其进行修改。
- 线程函数:
increment
函数模拟了对共享变量 count
的递增操作。
mtx.lock();
在修改 count
之前锁定互斥锁,这样其他线程就无法同时进入这一临界区。
++count;
对共享变量 count
进行递增操作。
mtx.unlock();
修改完成后解锁互斥锁,允许其他线程进入临界区修改 count
。
- 主线程:
- 创建两个线程
t1
和 t2
,都执行 increment
函数。
t1.join();
和 t2.join();
等待两个线程执行完毕。
- 最后输出共享变量
count
的最终值,由于使用了互斥锁保护,这个值应该是两个线程递增操作次数之和,即2000000。