簡體   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