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

 

Logo

更多推荐