2016-12-08 37 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的值上添加一个条件)。

相关问题