如何使用c++新开5个线程,线程有参数并且有返回值,并等待全部线程结束
时间: 2023-08-05 18:33:42 浏览: 94
在 C++ 中,可以使用 `<thread>` 头文件中的 `std::thread` 类来创建新线程。线程参数和返回值可以通过构造函数和成员函数来实现。
为了等待所有线程结束,可以使用 `std::thread` 的 `join()` 方法,它会阻塞当前线程,直到对应的线程执行完毕。
下面是一个示例代码,创建了 5 个线程,每个线程都会计算从 1 到传入的参数的和,并返回计算结果,然后等待所有线程执行完毕,最后将所有结果相加:
```cpp
#include <iostream>
#include <thread>
#include <vector>
int sum(int n) {
int s = 0;
for (int i = 1; i <= n; ++i) {
s += i;
}
return s;
}
int main() {
std::vector<std::thread> threads;
const int num_threads = 5;
std::vector<int> results(num_threads);
for (int i = 0; i < num_threads; ++i) {
threads.emplace_back([i, &results]() {
results[i] = sum(i + 1);
});
}
// Wait for all threads to finish
for (auto& t : threads) {
t.join();
}
int total = 0;
for (int r : results) {
total += r;
}
std::cout << "Total sum: " << total << std::endl;
return 0;
}
```
在上面的示例代码中,我们创建了一个线程数组 `std::vector<std::thread> threads` 和一个结果数组 `std::vector<int> results`,然后创建了 5 个线程,每个线程调用 `sum()` 函数计算从 1 到传入的参数的和,并将结果保存到对应的结果数组中。
在主线程中,我们使用 `join()` 方法等待所有线程执行完毕,然后遍历所有结果数组,将所有结果相加,最后打印出总和。注意,为了让线程能够访问结果数组,我们使用了一个 lambda 表达式捕获了结果数组的引用。
阅读全文