1
thread_local int sum = 0;
void thrCal(int row, int column, int n, int &result, const vector<vector<int>> &A, const vector<vector<int>> &B)
{
Sleep(1000);
for (int i = 0; i < n; i++)
sum += A[row][i] * B[i][column];
result = sum;
} //calculates each element with thread
void calculate(vector<vector<int>> &A, const vector<vector<int>> &B)
{
vector<vector<int>> temp;
vector<thread> T;
int row = A.size(), column = B[0].size(), n = A[0].size();
cout << "check print" << endl;
temp.resize(row);
for(auto &i : temp)
i.resize(column);
for (int i = 0; i < row; i++)
for (int j = 0; j < column; j++)
T.push_back(thread(thrCal, i, j, n, ref(temp[i][j]), ref(A), ref(B)));
for (auto &i : T)
i.join();
A = move(temp);
} //matrix A = A * B with multithread
int main()
{
vector<vector<int>> *A = new vector<vector<int>>[3];
vector<vector<int>> result;
A[0].resize(50);
A[1].resize(50);
A[2].resize(50);
for (int i = 0; i < 3; i++)
for (auto &j : A[i])
j.resize(50);
result = A[0];
for (int i = 1; i < 3; i++)
calculate(result, A[i]);
}
如果Sleep(1000)
呼叫不目前,该代码按预期工作。线程杀死进程,因为休眠功能的
如果Sleep(1000)
呼叫存在,calculate()
功能第一次工作,但第二次,当T.push_back
周围的循环结束时它终止过程。
为什么会出现这种情况?
(Windows7中和Microsoft Visual Studio 2015年)
你的问题不清楚。请更准确地说明什么线程运行,什么时候运行,以及它们终止的条件和方式。 – jotik
也解释了什么是“总和”,因为你似乎并发访问这个变量。 –
无法重现[Demo](http://coliru.stacked-crooked.com/a/8af64aa66d694172)。 – Jarod42