您当前的位置: 首页 >  c++

我什么都布吉岛

暂无认证

  • 1浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++11线程库 (七) 线程的停止

我什么都布吉岛 发布时间:2021-10-29 10:20:47 ,浏览量:1

在这篇文章里,我们将会讨论如何在C++11下停止和终止一个线程。

为什么C++11不直接提供一个停止线程的方法?这是因为线程在停止之前可能有一些资源需要被释放、关闭,比如说:

  • 线程中已经获取锁的所有权,突然退出谁将会负责这个锁所有权释放?
  • 如果线程打开了一写文件流,谁将会回收这个文件资源?
  • 如果线程中有动态内存分配,内存泄露如何避免?

简单来说就是线程退出时可能有资源需要回收,而C++11无法知晓用户具体使用了哪些资源。虽然如此,但是我们仍可以通过简单的方式实现线程退出:即定时检查或者程序中某个节点检查,检查的内容是是否退出,处理方式是释放所有的资源优雅退出。

一、使用std::future停止一个线程

我们可以向线程传递一个std::future对象,为什么是传递一个空值,这是因为我们只是想要信号而不是真正的想要获取值。

首先创建一个值为void的promise对象:

std::promise exitSignal;

现在我们可以在主线程中绑定promise和future:

std::future futureObj=exitSignal.get_future();

然后在主函数中创建线程并往线程传递future对象:

std::thread th(&threadFunction,std::move(futureObj));

在线程的内部,除了完成一些线程工作外,还持续检查线程是否需要退出(在这里的条件就是future对象值是否可用)

void threadFunction(std::future futureObj)
{
    std::cout             
关注
打赏
1658157489
查看更多评论
0.0392s