簡體   English   中英

std::thread (c++11) 中使用的函數可以有 [[noreturn]] 嗎?

[英]Could the function used in std::thread (c++11) have [[noreturn]]?

對於std::thread t(foo); , 有一個foo [[noreturn]] () {...}有意義嗎? 例如。 對於分離的線程(用作一種守護進程,直到應用程序完成)?

線程不創建新進程,也不使用 fork 或 exec,它創建了一個最終肯定會返回的線程。 如果您的線程函數永遠不會返回,您將掛在std::thread::join

用 [[noreturn]] 標記用於線程的函數對 gcc/clang 有什么好處嗎?

線程函數通常會返回。 所以不,它們不能用[[noreturn]]標記。

除非它們被編碼為具有無限循環、永遠阻塞或調用終止線程或進程的函數。 在這種情況下,您可能希望將它們標記為noreturn

請注意,如果您使用像pthread_create這樣的低級函數來創建一個線程或其他定義在編譯時不可用的函數,則noreturn屬性不會對通過指針調用您的函數的代碼產生任何影響。

忽略分離線程的線程函數的返回值。

我希望它(std::thread 構造)是我系統上的某種 fork + execve 變體,一旦成功,它就沒有什么可返回的了。

std::thread 創建一個單獨的線程(在同一進程內)。 fork + execve 在多個進程上工作。

用 [[noreturn]] 標記用於線程的函數對 gcc/clang 有什么好處嗎?

僅當您傳遞給 std::thread 的函數不返回時(即,如果該函數調用 std::exit、std::terminate、在所有情況下拋出或開始無限循環等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM