C++ 多线程编程基础与 std::thread 使用
C++11 提供了标准线程库,让多线程编程更加安全和便捷。本文将讲解 std::thread 的基本使用及注意事项。
一、创建线程
cpp
#include <iostream>
#include <thread>
void task(int n) {
std::cout << "线程 " << n << " 正在执行\n";
}
int main() {
std::thread t1(task, 1);
std::thread t2(task, 2);
t1.join(); // 等待线程结束
t2.join();
}
二、线程参数传递
可以通过值或引用传递参数:
cpp
void modify(int &x) { x += 5; }
int main() {
int num = 10;
std::thread t(modify, std::ref(num)); // 使用 std::ref 传引用
t.join();
std::cout << "num = " << num << "\n"; // 15
}
三、线程安全与互斥量
多线程共享数据时需要使用互斥量 std::mutex:
cpp
#include <mutex>
#include <vector>
std::mutex mtx;
int counter = 0;
void increment(int n) {
for (int i = 0; i < n; i++) {
std::lock_guard<std::mutex> lock(mtx);
counter++;
}
}
int main() {
std::thread t1(increment, 1000);
std::thread t2(increment, 1000);
t1.join();
t2.join();
std::cout << "counter = " << counter << "\n";
}
总结
std::thread 用于创建和管理线程
使用 join() 等待线程结束
共享数据时要用 std::mutex 或其他同步机制