我正在学习用矩阵乘法多线程作为一个例子,我创造了这个计划:
#include <iostream>
#include <vector>
#include <thread>
#include <functional>
using namespace std;
int N = 50;
void do_multiply_for_row(const vector<vector<int> >& matrix, int i, int N, vector<int>& answer) {
for (int j = 0; j < N; j++) {
answer[j] = 0;
for (int k = 0; k < N; k++) {
answer[j] += matrix[i][k] * matrix[k][j];
}
}
cout << "Done " << i << endl;
}
int main() {
vector<vector<int> > matrix(N, vector<int> (N, 0));
int x = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
matrix[i][j] = x++;
}
}
vector<vector<int> > result(N, vector<int> (N, 0));
vector<std::thread> threads;
for (int i = 0; i < N; i++) {
threads.push_back(std::thread(std::bind(do_multiply_for_row, std::cref(matrix), i, N, std::ref(result[i]))));
}
for (int i = 0; i < threads.size(); i++) threads[i].join();
for (int i = 0; i < N; i++) {
for (int j =0; j < N; j++){
cout << result[i][j] << " ";
}
cout << endl;
}
return 0;
}
我将最终创建50个线程,但得到libc++abi.dylib: terminating with uncaught exception of type std::__1::system_error: thread constructor failed: Resource temporarily unavailable
是否有限制我创建的线程数或我做错了什么?
NVM,我是一个小丑,一次又一次为同一行创建线程。 – user1159517 2014-11-01 18:07:13
您可以创建的线程数量有限制,最终取决于您的系统。 – 0x499602D2 2014-11-01 18:09:54
没关系。我比较单线程矩阵乘法和多线程矩阵乘法的结果,以及单线程总是赢的结果! – user1159517 2014-11-01 18:10:53