linux 上 通过C++ 标准库thread 建立的线程怎么关闭

C++11 自带了线程库thread,之所以要写linux,是因为C++标准库thread在底层,仍旧使用的是平台相关的线程API。在linux上C++标准库thread使用的是pthread,实质上是在pthread上封装了一层,因此thread的释放靠得就是pthread。

首先,我们新建一个线程:

   std::thread th (function); //注意,如果是使用new 创建的std::thread, 禁止直接使用delete, 需要在调用delete之前,调用 join()或者 detach()。其中join表示主线程要在join处等待子线程完成才会执行下一步, 即thread::join()会阻塞当前线程,直至 *this 所标识的线程完成其执行。*this 所标识的线程的完成同步于从 join() 的成功返回。,detach则是子线程和主线程分离,主线程不用等待子线程,允许执行独立地持续。一旦线程退出,则释放所有分配的资源。调用 detach后, *this 不再占有任何线程。

thread有关的信息可以参考博文https://blog.csdn.net/oyoung_2012/article/details/78958274

 C++ std::thread 没有直接提供退出线程api的,如果线程里面是死循环,它就会一直执行,但是有的时候我们需要它退出,这时就需要调用平台的api,但是pthread和thread是两个不同的库,pthread怎么能够指挥得动另一个类呢?

我们看标准库源码,原来std::thread 已经提供了指向pthread的接口

thread类函数native_handle()就是指向pthread,因此我们就可以调用pthread释放它了;

pthread_t rt=th.native_handle();

pthread_cancel(rt);

当然linux结束线程不止pthread_cancel这一个函数,可以参考博文https://www.cnblogs.com/love-DanDan/p/8724241.html

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值