我正在学习使用线程。我发现我可以使用以下
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);
}
任何人都能解释一下吗?
答案 0 :(得分:2)
您需要移动对象:
thread t(func, i);
threads.push_back(std::move(t));
emplace
也有效,但push_back
在这种情况下是惯用的。当然还有#include <utility>
。