在下面的代码中,对象'queue'是不可复制的,但由于std :: mutex而可以移动.
std::generate_n(std::back_inserter(thread_pool),
std::thread::hardware_concurrency,
[&](){return std::thread(handler(), exiting, queue);});
Run Code Online (Sandbox Code Playgroud)
由于互斥锁上的私有拷贝构造函数,VC++ 2012无法编译.它无法为队列生成复制构造函数.为什么要尝试复制队列?在我看来,一切都是通过参考,因此没有副本.
您试图queue通过将值传递给std::thread构造函数来进行复制.如果您要传递引用,请使用包装器:std::ref(queue).
如果你真的想要queue进入std::thread,你需要传递std::move(queue)使它成为一个右值.但由于VS中存在错误,它仍然无法正常工作.
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |