一.传统多线程编写:

一般来说,我们在主线程中开辟出一些子线程来完成我们的任务,正常情况下,需要在主线程的最后调用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()相关推荐

  1. 多线程中Thread的join方法

    多线程中Thread的join方法 join简介 join方法是Thread类中的一个方法,该方法的定义是等待该线程执行直到终止.其实就说join方法将挂起调用线程的执行,直到被调用的对象完成它的执行 ...

  2. 关于多线程中sleep、join、yield的区别

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Good friends are like stars. You don't ...

  3. C++11多线程中std::call_once的使用

    C++11中的std::call_once函数位于<mutex>头文件中. 在多线程编程中,有时某个任务只需要执行一次,此时可以用C++11中的std::call_once函数配合std: ...

  4. Multi-thread--C++11多线程中std::call_once的使用

    C++11中的std::call_once函数位于<mutex>头文件中. 在多线程编程中,有时某个任务只需要执行一次,此时可以用C++11中的std::call_once函数配合std: ...

  5. java多线程中CountDownLatch和join的使用

    在工作中,我们经常需要和多线程打交道,简单说明一个场景,在工厂流水线上有2条流水线,流水线同时开工生产零件,但是每个零件生产时间不一样,只有等到两个零件都生产完毕之后才能开始总组装.那我们很快想到jo ...

  6. C++11多线程第三篇:线程传参详解,detach()大坑,成员函数做线程参数

    文章目录 3.1 传递临时对象作为线程参数 3.1.1 要避免的陷阱(解释1) 3.1.2 要避免的陷阱(解释2) 3.1.3 总结 3.2 临时对象作为线程参数进一步详解 3.2.1 线程id概念 ...

  7. python多线程中join()的理解

    在 Python 的多线程编程中,经常碰到 thread.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. 第一,当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...

  8. 你能说出多线程中 sleep、yield、join 的用法及 sleep与wait区别吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:noteless cnblogs.com/noteless/ ...

  9. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  10. JAVA多线程中join()方法的详细分析

    虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像 ...

最新文章

  1. WL 2009 professional【已解决】谢谢nooby跟海风
  2. 单片机低功耗设计杂谈
  3. 没有内存条电脑能开机吗_电脑没内存条能开机吗?这位朋友说他的电脑没内存条都用几年了!...
  4. CML更新 | 新增百度小程序、支付宝小程序
  5. 法国一家夜总会上演机器人钢管舞
  6. 工业级以太网交换机的应用领域有哪些?
  7. Nexus3.x.x上传第三方jar
  8. python取余_大牛带你打牢Python基础,看看这10语法
  9. 等比例缩放图片-opencv
  10. 在Node.js中发起HTTP请求的5种方法
  11. 编写 Window 服务程序
  12. linux中ps-p,linux下ps命令
  13. iBase4J简单应用添加模块
  14. 破解WinRAR广告
  15. SSM毕设项目基于网页的车辆检测站登录软件reo2q(java+VUE+Mybatis+Maven+Mysql)
  16. uniapp 之 禁用手机物理返回键
  17. 是时候使用Markdown写作了
  18. java通过qq邮箱发送_java实现发送QQ邮箱
  19. NT151应用案例:西门子PLC S7-1200与派克ACR9000的通信(Part 4)
  20. 热度TopN排名算法的设计

热门文章

  1. Oracle Study之案例--安装Oracle内核参数配置
  2. Jira迁移及内存调整
  3. 基于Redis实现分布式单号,分布式ID(自定义规则生成)
  4. 线程知识点——Event事件
  5. 开发板ping不通Linux虚拟机的原因及解决办法
  6. gateway 过滤器执行顺序_Spring Boot实战之:轻松搞定拦截器与过滤器
  7. android checkbox 选中事件_智慧树知到Android移动应用开发基础章节测试答案
  8. clr20r3 程序终止的几种解决方案_IT外包桌面解决方案——不慌,蓝屏而已
  9. 【视频】线性混合效应模型(LMM,Linear Mixed Models)和R语言实现案例
  10. 拓端tecdat:R语言贝叶斯广义线性混合效应(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据