对于std::thread t(foo);
,拥有foo [[noreturn]] () {...}
是否有意义?例如,对于一个分离的线程(用作一种守护进程,直到应用程序完成)?
线程不创建一个新进程,也不使用fork或exec,它创建一个最终肯定会返回的线程。如果你的线程函数永远不会返回,你会挂在std::thread::join
在gcc/clang上用[[noreturn]]标记线程使用的函数会有什么好处吗?
线程函数通常会返回。所以不,它们不能被标记为[[noreturn]]
。
除非它们被编码为无限循环、永久阻塞或调用终止线程或进程的函数。在这种情况下,您可能希望将它们标记为noreturn
。
注意,如果你使用pthread_create
这样的低级函数来创建一个线程或其他在编译时无法定义的函数,noreturn
属性将不会对通过指针调用你的函数的代码产生任何影响。
忽略分离线程的线程函数的返回值
我希望它(std::thread construction)在我的系统上是某种fork + execute的变体,一旦成功,它就没有什么可返回的了。
std::thread创建一个单独的线程(在同一进程中)。Fork +执行多个进程的工作
在gcc/clang上用[[noreturn]]标记线程使用的函数会有什么好处吗?
仅当您传递给std::thread的函数不返回时(即,如果函数调用std::exit、std::terminate、抛出所有情况或开始无限循环,等等)