當分離的執行緒超出 Main() 的生存時間時會發生什麼?
在 C 中,可以使用 detach() 分離線程,從而允許它們運行獨立於最初創建它們的 std::thread 物件。然而,main() 退出時分離執行緒的標準行為仍然不明確。
標準沉默和隱含效果
C 14 草案的 1.10 節和 30.3 節都沒有明確說明定義 main() 退出時分離線程的命運。這種歧義導致了幾個問題:
缺乏明確的指導方針表明,在分離的線程中用完了 main()必須具有已定義的效果,因為停止分離線程本質上會使 detach() 變得毫無意義。
隱含限制
雖然標準沒有明確說明分離線程會發生什麼,它確實提供了一些約束:
加入分離線程
分離線程是否可以被加入的問題答案中也提到了加入。答案表明,確實可以使用 *_at_thread_exit 系列函數(notify_all_at_thread_exit()、std::promise::set_value_at_thread_exit() 等)來連接分離執行緒。
緩解未定義行為
避免main() 時未定義的行為退出並運行分離線程,請考慮以下策略:
結論
雖然C 標準沒有明確定義main () 退出時分離執行緒的行為,但它提供了一些限制和意義,顯示定義的效果。透過遵守這些限制並使用 *_at_thread_exit 系列函數,程式設計師可以處理分離的執行緒並避免未定義的行為。
以上是當 C 中的 main() 函數退出時,分離執行緒會發生什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!