C++11多线程中的detach()、join()、joinable()
一.传统多线程编写:
一般来说,我们在主线程中开辟出一些子线程来完成我们的任务,正常情况下,需要在主线程的最后调用join(),用于阻塞主线程,避免主线程先于其他子线程执行完毕,退出,然后导致整个进程的异常.
join():阻塞主线程,主线程等待其他子线程执行完毕,一起退出.
二.非传统多线程编写: 引入detach()
有人说,我们创建多个线程完成一些任务,不过需要主线程最后等待所有的子线程完毕才能退出,这样不好,主线程不自由.
所以,detach()应运而生,希望主线程可以正常的退出, 子线程被挪到后台运行,这些子线程会被C++运行时库接管,当这些子线程运行完毕后,由运行时库清理线程相关的资源, 即就是守护线程.
detach():会使线程失去我们的控制,但是如果希望子线程做的事情与我们控制与否不影响,那么
就可以使用detach(),因为子线程会跑到后台运行.
一旦调用了detach,就不要调用join,否则系统发生异常.1 #include<iostream>2 #include<thread>3 using namespace std;4 5 void thread_callback()6 {7 cout<<"这是子线程运行的函数"<<endl;8 }9 10 int main()11 {12 thread t1(thread_callback);13 t1.detach();14 //执行到该函数,t1子线程将和主线程分离.即就是t1将在后台运行15 //主线程不会和运行join一样在这里阻塞,而是正常退出 16 return 0;17 }
三.join() 和 joinable()
用来判断是否能够调用join()或者detach(),可以返回true,不可以返回false.
注意同一个线程不能同时调用jion()和detach().
//...exa
thread t1(fun);
if (t1.joinable() )
{ //ok to call join/detacht1.join()//t1.detach()
}
else
{//do something
}
————————————————
版权声明:本文为CSDN博主「KingOfMyHeart」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/KingOfMyHeart/article/details/96481709
C++11多线程中的detach()、join()、joinable()相关推荐
- 多线程中Thread的join方法
多线程中Thread的join方法 join简介 join方法是Thread类中的一个方法,该方法的定义是等待该线程执行直到终止.其实就说join方法将挂起调用线程的执行,直到被调用的对象完成它的执行 ...
- 关于多线程中sleep、join、yield的区别
点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Good friends are like stars. You don't ...
- C++11多线程中std::call_once的使用
C++11中的std::call_once函数位于<mutex>头文件中. 在多线程编程中,有时某个任务只需要执行一次,此时可以用C++11中的std::call_once函数配合std: ...
- Multi-thread--C++11多线程中std::call_once的使用
C++11中的std::call_once函数位于<mutex>头文件中. 在多线程编程中,有时某个任务只需要执行一次,此时可以用C++11中的std::call_once函数配合std: ...
- java多线程中CountDownLatch和join的使用
在工作中,我们经常需要和多线程打交道,简单说明一个场景,在工厂流水线上有2条流水线,流水线同时开工生产零件,但是每个零件生产时间不一样,只有等到两个零件都生产完毕之后才能开始总组装.那我们很快想到jo ...
- C++11多线程第三篇:线程传参详解,detach()大坑,成员函数做线程参数
文章目录 3.1 传递临时对象作为线程参数 3.1.1 要避免的陷阱(解释1) 3.1.2 要避免的陷阱(解释2) 3.1.3 总结 3.2 临时对象作为线程参数进一步详解 3.2.1 线程id概念 ...
- python多线程中join()的理解
在 Python 的多线程编程中,经常碰到 thread.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. 第一,当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...
- 你能说出多线程中 sleep、yield、join 的用法及 sleep与wait区别吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:noteless cnblogs.com/noteless/ ...
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- JAVA多线程中join()方法的详细分析
虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像 ...
最新文章
- WL 2009 professional【已解决】谢谢nooby跟海风
- 单片机低功耗设计杂谈
- 没有内存条电脑能开机吗_电脑没内存条能开机吗?这位朋友说他的电脑没内存条都用几年了!...
- CML更新 | 新增百度小程序、支付宝小程序
- 法国一家夜总会上演机器人钢管舞
- 工业级以太网交换机的应用领域有哪些?
- Nexus3.x.x上传第三方jar
- python取余_大牛带你打牢Python基础,看看这10语法
- 等比例缩放图片-opencv
- 在Node.js中发起HTTP请求的5种方法
- 编写 Window 服务程序
- linux中ps-p,linux下ps命令
- iBase4J简单应用添加模块
- 破解WinRAR广告
- SSM毕设项目基于网页的车辆检测站登录软件reo2q(java+VUE+Mybatis+Maven+Mysql)
- uniapp 之 禁用手机物理返回键
- 是时候使用Markdown写作了
- java通过qq邮箱发送_java实现发送QQ邮箱
- NT151应用案例:西门子PLC S7-1200与派克ACR9000的通信(Part 4)
- 热度TopN排名算法的设计
热门文章
- Oracle Study之案例--安装Oracle内核参数配置
- Jira迁移及内存调整
- 基于Redis实现分布式单号,分布式ID(自定义规则生成)
- 线程知识点——Event事件
- 开发板ping不通Linux虚拟机的原因及解决办法
- gateway 过滤器执行顺序_Spring Boot实战之:轻松搞定拦截器与过滤器
- android checkbox 选中事件_智慧树知到Android移动应用开发基础章节测试答案
- clr20r3 程序终止的几种解决方案_IT外包桌面解决方案——不慌,蓝屏而已
- 【视频】线性混合效应模型(LMM,Linear Mixed Models)和R语言实现案例
- 拓端tecdat:R语言贝叶斯广义线性混合效应(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据