写一段c puls plus多线程使用案例
时间: 2023-05-29 16:01:16 浏览: 170
假设有一个需求:编写一个程序,计算两个大矩阵的乘积。由于矩阵运算量较大,需要采用多线程并行计算,提高程序效率。
下面是一种可能的C++多线程使用案例:
```c++
#include <iostream>
#include <thread>
#include <vector>
void mulMatrix(int start, int end, int* A, int* B, int* C, int n, int m, int p) {
for (int i = start; i < end; i++) {
for (int j = 0; j < p; j++) {
C[i * p + j] = 0;
for (int k = 0; k < m; k++) {
C[i * p + j] += A[i * m + k] * B[k * p + j];
}
}
}
}
int main() {
int n = 1000, m = 2000, p = 1500;
int* A = new int[n * m];
int* B = new int[m * p];
int* C = new int[n * p];
// 初始化矩阵
for (int i = 0; i < n * m; i++) A[i] = i % 97;
for (int i = 0; i < m * p; i++) B[i] = i % 89;
int num_thread = 4;
std::vector<std::thread> threads;
// 创建多个线程进行并行计算
for (int i = 0; i < num_thread; i++) {
int start = i * n / num_thread;
int end = (i + 1) * n / num_thread;
threads.emplace_back(std::thread(mulMatrix, start, end, A, B, C, n, m, p));
}
// 等待所有线程结束
for (int i = 0; i < num_thread; i++) {
threads[i].join();
}
// 输出结果
std::cout << C[0] << " " << C[1] << " " << C[2] << std::endl;
delete[] A;
delete[] B;
delete[] C;
return 0;
}
```
该程序先初始化两个大矩阵A和B,然后创建4个线程进行并行计算,每个线程负责计算C矩阵的一部分。线程函数mulMatrix实现了两个矩阵的乘积计算,其中通过start和end参数来限定每个线程计算的部分。最后,等待所有线程计算完毕后,程序输出了C矩阵中前三个元素的值。
注意,该程序并未考虑多线程情况下的竞争条件和临界区问题,如果需要更进一步的优化,还需要加入线程锁等措施。
阅读全文