C++ std::thread 初级介绍

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值