繁体   English   中英

具有完成功能的std :: thread

[英]std::thread with finished function

我有一个像这样的线程:

std::thread t{ [](){} };

因此,新线程突然结束。 如果我没有调用join ,操作系统是否可能将上下文切换到此“死”线程? 还是系统“注意到”该线程处于不活动状态,并且即使我从未调用join也从不切换到该线程?

当线程完成时,它实际上完成了。 操作系统永远不会切换上下文,因为没有地方可以切换上下文。 但是您的std :: thread对象仍然存在,您仍然可以在其上调用join 而且它将正常运行:在您的情况下,线程完成后立即返回。

操作系统何时切换到线程的确切算法不是由C ++定义的,而是由操作系统调度程序定义的。

根据标准§30.3,如果t.joinable()为true,则可能存在与您的线程对象相对应的操作系统线程。 请注意,即使线程未运行完毕,只要线程尚未连接或分离, t.joinable()为true。

如果已分离,则该对象不再与底层OS线程实现连接,这通常现在是OS负责清理的任务(例如,在程序终止时),除非您明确地执行了与平台有关的操作,例如使用本机句柄。 分离后,该线程的代码可能仍在运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM