// threadMovedFixed.cpp
#include <iostream>
#include <thread>
#include <utility>
int main(){
std::thread t([]{std::cout << std::this_thread::get_id() << std::endl;});
std::thread t2([]{std::cout << std::this_thread::get_id() << std::endl;});
t.join();
t = std::move(t2);
t.join();
std::cout << "\n";
std::cout << std::boolalpha << "t2.joinable(): " << t2.joinable() << std::endl;
}
我正在查看以下代码片段,似乎存在几个问题。
(1) 当 t2
在执行其 lambda 表达式时被移动到 t
中时,会发生什么情况?在这种情况下,t2
会立即终止并且 t
重新从头开始执行 t2
的 lambda 表达式,还是会继续执行 t2
停下来的地方?
(2) t
正在接收 t2
,但此时 t
可能正在执行其自身的 lambda 表达式。在这种情况下会发生什么?t
是否会立即终止自己的调用以接收 t2
?
std::move
来解决std::thread
的问题吗?还是你正在解决由这个片段引起的错误,而这个片段不是你编写的?请提供更多上下文,因为这个片段看起来很奇怪。 - Louis Go