知识卡片
thread必须收束
内容
joinable 表示线程句柄尚需收束,不等于线程仍在运行:线程函数已结束但尚未 join,句柄也可能可结合。可结合的 std::thread 析构会终止程序。用 RAII 保证各路径 join 或 detach,同时判断等待死锁及分离后悬垂访问风险。
参考来源
- 位置:《Effective Modern C++》第7章《并发API》,条款三十七:使 std::thread 在所有路径最后都不可结合(源文件:_epub-src/EPUB/text/ch008.xhtml)
- 结论依据:原文定义可结合状态并列出join/detach风险,线程结束不自动让句柄不可结合。
- 原始内容:在所有路径上保证 thread 最终是不可结合的。 析构时 join 会导致难以调试的表现异常问题。 析构时 detach 会导致难以调试的未定义行为。 声明类数据成员时,最后声明 std::thread 对象。