簡體   English   中英

C ++中的向量多線程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM