我使用3個線程塊的for循環,和「數據」是一個全球性的陣列,所以我要鎖定在「calculateAll」功能的一部分,C++多線程返回值
std::vector<int> calculateAll(int ***data,std::vector<LineIndex> indexList)
{
std::vector<int> v_a=std::vector<int>();
for(int a=0;a<indexList.size();a++)
{
mylock.lock();
v_b.push_back(/*something related with data*/);
mylock.unlock();
v_a.push_back(a);
}
return v_a;
}
for(int i=0;i<3;i++)
{
int s =firstone+i*chunk;
int e = ((s+chunk)<indexList.size())? (s+chunk) : indexList.size();
t[i]=std::thread(calculateAll,data,indexList,s,e);
}
for (int i = 0; i < 3; ++i)
{
t[i].join();
}
我的問題是,我怎樣才能得到來自每個線程的矢量的返回值,然後將它們組合在一起?我想這樣做的原因是因爲如果我將'v_a'聲明爲全局向量,當每個線程在這個向量'v_a'中嘗試push_back它們的值時,它會有一些崩潰(或不是?)。所以我想爲每個線程聲明一個向量,然後將它們組合成一個新的向量以供進一步使用(就像我沒有線程那樣)。
或者是否有一些更好的方法來處理併發問題? 'v_a'的順序無關緊要。
我很欣賞任何建議。
查找「期貨」,這是一種方式,標準規定了線程以「返回」值到另一個線程。 –