移动std :: thread

时间:2013-07-16 10:28:33

标签: c++ multithreading c++11 move-semantics assignment-operator

尝试使用简单的代码:

std::thread threadFoo;

std::thread&& threadBar = std::thread(threadFunction);

threadFoo = threadBar; // thread& operator=( thread&& other ); expected to be called

收到错误:

  

使用已删除的函数'std :: thread&的std ::螺纹::运算符=(const的   的std ::螺纹&安培)'

我明确地将threadBar定义为右值引用,而不是普通引用。为什么没有预期的操作员被调用?如何将一个线程移动到另一个线程?

谢谢!

2 个答案:

答案 0 :(得分:13)

命名引用是左值。左值不绑定到右值参考。您需要使用std::move

threadFoo = std::move(threadBar);

答案 1 :(得分:0)

另见std::thread::swap。这可以实现为

std::thread threadFoo;
std::thread threadBar = std::thread(threadFunction);
threadBar.swap(threadFoo);