C++标准库joinable和join的用法
std:🧵:joinable
bool joinable() const noexcept; (C++11 起)
检查 std::thread对象标识是否是活跃的执行线程。具体而言,若 get_id() != std:🧵:id() 则返回 true 。故默认构造的 thread 不可结合。
结束执行代码,但仍未jion的线程仍被当作活跃的执行线程,从而可jion。
返回值
若 thread 对象标识活跃的执行线程则为 true ,否则为 false 。
std:🧵:join
void join();(C++11 起)
阻塞当前线程直至 *this 所标识的线程结束其执行。
*this 所标识的线程的完成同步于对应的从 join() 成功返回。
*this 自身上不进行同步。同时从多个线程在同一 thread 对象上调用 join() 构成数据竞争,导致未定义行为。
后置条件
joinable() is false
std:🧵:detach
void detach(); (C++11 起)
从 thread 对象分离执行线程,允许执行独立地持续。一旦该线程退出,则释放任何分配的资源。
调用 detach 后 *this 不再占有任何线程。
后置条件
joinable() is false
总结
joinable()
判断线程是否活跃,活跃的线程可以调用join()来阻塞,直到线程执行完毕