我正在學習用矩陣乘法多線程作爲一個例子,我創造了這個計劃:
#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