当分离的线程超出 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中文网其他相关文章!