在学习基本线程管理时,我发现很难从一本书中理解这些行(以粗体表示)。
启动线程后,您需要显式地决定是等待它完成(通过与它连接--参见2.1.2节)还是让它自行运行(通过分离它--参见第2.1.3节)。如果在销毁std::线程对象之前没有做出决定,那么程序就会终止(std::线程析构函数调用std::terminate())。因此,必须确保线程被正确地连接或分离,即使在出现异常的情况下也是如此。有关处理此场景的技术,请参阅2.1.3节。请注意,您只需在std::线程对象被破坏之前做出此决定--线程本身很可能在加入或分离它之前很久就完成了,并且如果您分离它,那么线程可能在std::对象被销毁后很长时间内继续运行。
甚至在线程对象被销毁之后,线程何时运行?有人有样本代码或任何参考吗?
发布于 2017-08-15 20:08:31
这意味着线程的生存期与线程对象的生存期无关。
因此,下面的代码:
#include <thread>
#include <iostream>
int main() {
{ //scope the thread object
std::thread thr = std::thread([]() {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Thread stuff\r\n";
});
thr.detach();
} //thr is destroyed here
std::cout << "thr destroyed, start sleep\r\n";
std::this_thread::sleep_for(std::chrono::seconds(10));
std::cout << "sleep over\r\n";
}
将产出:
thr destroyed, start sleep
Thread stuff
sleep over
https://stackoverflow.com/questions/45704779
复制