[英]Multithreading with vectors in C++
基於此代碼 ,我試圖做一個簡單的多線程程序,其中在輸入參數中將線程數確定為num_threads
並且這些線程必須使用給定的輸入參數調用相同的方法。
當由於重新定義thread_id
而導致num_items > num_threads
時出現問題(盡管所有線程在使用后都已連接),有人知道我在哪里失敗嗎?
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
因為你永遠只增加了向量,舊的線程句柄呆在那里,並嘗試重新join
他們(用新的沿),這是一個std::system_error
作為記錄 。
在您的j
-loop末尾嘗試以下操作:
thread_id.clear()
另外,請注意,將始終創建多個num_threads
,等於或大於num_items
。 您可能希望以不同的方式對待最后一次迭代(只需在i*num_threads + j
的值上添加一個條件)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.