用于创建线程并加入可变数量的线程的循环

时间:2018-11-15 23:00:32

标签: c++ multithreading loops

我正在构建一个程序,出于测试目的,该程序可以在C ++中创建N个线程。 我是C ++的相对新手,到目前为止,我目前的尝试是

//Create a list of threads
std::vector<std::thread> t;
for(i=0; i < THREADS; i ++){
    std::thread th = std::thread([](){ workThreadProcess(); });
    t.push_back(th);
    printf("Thread started \n");
    }

for(std::thread th : t){
    th.join();
}

我当前出现一个错误,提示调用已删除的'std :: thread'构造函数。我很清楚这意味着什么或如何解决

注意:
我看过:

但是我不觉得他们回答了我的问题。他们大多数使用pthreads或其他构造函数。

1 个答案:

答案 0 :(得分:3)

您不能复制线程。您需要移动它们才能使其进入向量。同样,您不能在循环中创建临时副本以将其加入:您必须使用引用。

这是工作版本

std::vector<std::thread> t;
for(int i=0; i < THREADS; i ++){
    std::thread th = std::thread([](){ workThreadProcess(); });
    t.push_back(std::move(th));  //<=== move (after, th doesn't hold it anymore 
    std::cout<<"Thread started"<<std::endl;
    }

for(auto& th : t){              //<=== range-based for uses & reference
    th.join();
}

Online demo