创建vector <thread> </thread>

时间:2014-06-27 09:16:34

标签: c++

我只是想创建一个std::vector个线程并运行它们。

代码:

thread t1(calc, 95648, "t1");
thread t2(calc, 54787, "t2");
thread t3(calc, 42018, "t3");
thread t4(calc, 75895, "t4");
thread t5(calc, 81548, "t5");

vector<thread> threads { t1, t2, t3, t4, t5 };

错误:&#34;函数std :: thread :: thread(const std :: thread&amp;)&#34; (在&#34的第70行声明; C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ include \ thread&#34;)无法引用 - 它是已删除的函数

thread(const thread&) = delete;

什么似乎是问题?

3 个答案:

答案 0 :(得分:5)

由于线程不可复制但可移动,我建议使用以下方法:

std::vector<std::thread> threads;

threads.emplace_back(calc, 95648, "t1");
threads.emplace_back(calc, 54787, "t2");
threads.emplace_back(calc, 42018, "t3");
threads.emplace_back(calc, 75895, "t4");
threads.emplace_back(calc, 81548, "t5");

答案 1 :(得分:3)

您可以使用:

vector<thread> threads 
{ 
    std::move(t1),
    std::move(t2),
    std::move(t3),
    std::move(t4),
    std::move(t5) 
};

答案 2 :(得分:0)

禁止复制thread个对象。允许移动。但您可以使用shared_ptr来解决此问题。

我最喜欢使用线程向量的方法是通过共享指针。

std::vector<std::shared_ptr<std::thread>> threads;

以这种方式使用它们总是可以灵活地扩展向量(向量用于可扩展)。

threads.push_back(std::shared_ptr<std::thread>(new std::thread(&some_fn)));

对于您的代码,这将是:

using namespace std;

shared_ptr<thread> t1 = make_shared<thread>(calc, 95648, "t1");
shared_ptr<thread> t2 = make_shared<thread>(calc, 54787, "t2");
shared_ptr<thread> t3 = make_shared<thread>(calc, 42018, "t3");
shared_ptr<thread> t4 = make_shared<thread>(calc, 75895, "t4");
shared_ptr<thread> t5 = make_shared<thread>(calc, 81548, "t5");

vector<shared_ptr<thread>> threads { t1, t2, t3, t4, t5 };