3.joinable
想要创建完一个线程之后,就不再搭理它,最简单的办法还是“一不做二不休”:
...
std::thread trd;
...
代码创建了一个线程对象,但没有为它指定任何目标任务,可以称之为“空线程对象”。空线程对象无事可做,因此不会创建实际线程,因此它不仅不需要,而且不可以调用join()方法。
空的线程对象不能调用join(),已经完成join()调用的线程对象也不能重复调用。std::thread类提供joinable()方法,用于判断一个线程对象是否需要并且可以汇合。
下面这里子来自
cppreference.com网站
一个值得所有C++程序员经常浏览的好网站
除非就是为了实现完全不操心上层业务的线程管理功能,否则我们应该完全放弃使用joinable()。
当使用async(异步)时,我们必须永远清楚对应的future对象需不需要get(),
当使用thread以实现对特定并发业务的支撑时,必须永远清楚这个thread对象当前是否joinable。
一旦你需要记住joinable()方法帮你搞清楚某个线程是否需要以及可以汇合,你一定是乱了。