[英]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.