c++多线程例子
时间: 2025-07-08 09:43:26 浏览: 30
以下是一个简单的C++多线程示例,使用C++11标准中的`<thread>`库实现。示例包含线程创建、同步(互斥锁)和基本线程操作:
---
### **示例代码:多线程计算与同步**
```cpp
#include <iostream>
#include <thread>
#include <vector>
#include <mutex>
std::mutex mtx; // 互斥锁,用于同步输出
// 线程函数:打印数字
void printNumbers(int thread_id, int start, int end) {
for (int i = start; i <= end; ++i) {
std::lock_guard<std::mutex> lock(mtx); // 加锁,避免输出混乱
std::cout << "Thread " << thread_id << ": " << i << std::endl;
}
}
// 线程函数:计算向量元素的和
void sumVector(const std::vector<int>& vec, int& result) {
int sum = 0;
for (int num : vec) {
sum += num;
}
std::lock_guard<std::mutex> lock(mtx); // 加锁,保护共享变量
result = sum;
std::cout << "Sub-sum calculated: " << sum << std::endl;
}
int main() {
// 示例1:启动多个线程打印数字
std::thread t1(printNumbers, 1, 1, 5);
std::thread t2(printNumbers, 2, 6, 10);
t1.join(); // 等待线程t1结束
t2.join(); // 等待线程t2结束
// 示例2:多线程计算向量总和
std::vector<int> numbers = {1, 2, 3, 4, 5};
int total_sum = 0;
// 分段计算(模拟并行)
std::vector<std::thread> workers;
int partial_result;
std::thread worker1(sumVector, std::ref(numbers), std::ref(partial_result));
worker1.join();
// 合并结果(此处简化,实际可能需要更复杂的同步)
total_sum += partial_result;
std::cout << "Total sum: " << total_sum << std::endl;
return 0;
}
```
---
### **关键点说明**
1. **线程创建**
- 使用`std::thread`构造函数,传入函数名和参数。
- 线程函数可以是普通函数、Lambda表达式或成员函数(需绑定对象)。
2. **线程同步**
- `std::mutex` + `std::lock_guard`:确保对共享资源(如`cout`或变量)的互斥访问。
- 避免竞态条件(如多个线程同时修改`result`)。
3. **线程管理**
- `join()`:等待线程结束,防止主线程提前退出。
- `detach()`:让线程在后台运行(需谨慎使用,避免悬垂线程)。
4. **参数传递**
- 使用`std::ref`传递引用(如`result`),否则会复制值。
---
### **扩展:使用Lambda表达式**
```cpp
#include <thread>
#include <iostream>
int main() {
auto task = [](int id) {
std::cout << "Lambda Thread " << id << " is running.\n";
};
std::thread t(task, 1);
t.join();
return 0;
}
```
---
### **常见问题**
1. **线程安全**
- 多个线程操作同一变量时,必须同步(如用`mutex`或原子操作`std::atomic`)。
2. **死锁风险**
- 避免嵌套锁或未释放锁(推荐使用`lock_guard`自动管理锁生命周期)。
3. **性能考虑**
- 线程创建有开销,频繁创建销毁线程时建议用线程池(如`std::async`或第三方库)。
---
### **编译命令**
确保编译器支持C++11(如g++添加`-std=c++11`):
```bash
g++ -std=c++11 -pthread thread_example.cpp -o thread_example
```
---
阅读全文
相关推荐


















