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