std::thread 的相关特性总结:
头文件:#include <thread>
1) thread t(Start, args….) // 构造函数, Start() 为需要线程将要执行的函数,args 清单即为Start()函数的参数列表;
注意: 当执行完上述语句,即代表 一个线程已经启动执行;
t.join(); // 阻塞当前线程,直至目标线程执行完毕;只可以被调用1次,调用之后,joinable 被设置为false;
t.detach(); // 将thread对象和其表示的线程完全分离;分离后的线程不再受任何约束和管制、会单独执行,直至执行完毕释放资源,可以看做是一个daemon线程;
分离后thread对象不再表示任何线程;分离之后joinable 为false,即使仍在执行。
join/detach 函数都只能被调用一次,因为调用一次之后,joinable都被设置为false;不允许再次被调用。
joinable : 线程是否可以被join或者detach;
当线程没有调用join或者detach,线程执行完毕joinable仍然为true,那么当销毁thread对象时会调用terminate函数;
2) thread id
std::this_thread::get_id();
threadObject.get_id();
但是如果线程的joinable 被设置为false,那么get_id 返回的就不再是线程id,实测输出的是“thread::id of a non-executing thread”;
如果是默认构造函数即不带参数的线程对象,get_id 返回的也是“thread::id of a non-executing thread”
3) swap 交换线程;
thread t1(Start); thread t2(Start);
t1.swap(t2); 则2个线程对象底层的线程句柄被交换,可以通过get_id()函数来验证。
即交换前后的get_id()是相反的。
参考博客:
https://www.cnblogs.com/yssjun/p/11533346.html
https://blog.csdn.net/weixin_40087851/article/details/82685510