2016-12-08 74 views
0

根據this code,我試圖做一個簡單的多線程程序,其中在輸入參數中確定線程數爲num_threads,並且這些線程必須使用給定的輸入參數調用相同的方法。在C++中使用向量進行多線程操作

num_items > num_threads由於重新定義thread_id(儘管所有線程在使用後都被連接),問題就出現了。有誰知道我失敗的位置?

vector<thread> thread_id; 

int it = num_items/num_threads + (num_items%num_threads != 0); 
for(int i = 0; i < it; i++){ 
    for(int j = 0; j < num_threads; ++j) 
     thread_id.push_back(thread(method1, "parameter", i*num_threads + j)); 

    for(auto& t : threadId) 
     t.join(); 
} 

錯誤代碼如下:

terminate called after throwing an instance of 'std::system_error' 
    what(): Invalid argument 
+2

基本計數錯誤。想想你有多少次循環。 –

回答

2

既然你總是隻增加了向量,老線程處理呆在那裏,並嘗試重新join他們(與一起新的)這是一個std::system_erroras documented

j -loop結束試試這個:

thread_id.clear() 

另外,還要注意的num_threads多總是會被創建,這將等於或大於num_items更大。您可能想要以不同的方式處理最後一次迭代(只需在i*num_threads + j的值上添加一個條件)。

相關問題