线程相关的问题

时间:2014-01-23 23:51:02

标签: c++ multithreading

我正在学习使用线程。我发现我可以使用以下

mutex mx;

void func(int id)
{
    mx.lock();
    cout << "hey , thread:"<<id << "!" << endl;
    mx.unlock();
}
int main(){
    vector<thread> threads;
    for(int i = 0 ; i < 5 ; i++)
        threads.emplace_back(thread(func , i));
    for(thread & t : threads)
        t.join();
    return 0;
}

虽然我不能在main()

中做
for(int i = 0 ; i < 5 ; i ++)
{
    thread t(func , i);
    threads.emplace_back(t);
}

任何人都能解释一下吗?

1 个答案:

答案 0 :(得分:2)

您需要移动对象:

thread t(func, i);
threads.push_back(std::move(t));

emplace也有效,但push_back在这种情况下是惯用的。当然还有#include <utility>