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()来阻塞,直到线程执行完毕

posted @ 2024-04-12 15:33  HL棣  阅读(106)  评论(0编辑  收藏  举报