线程状态:

在一个线程的生存期内,可以在多种状态之间转换,不同的操作系统可以实现不同的线程模型,定义许多不同的线程状态,每个状态还可以包含多个子状态,但大体来说,如下几种状态是通用的:

1)就绪:参与调度,等待被执行,一旦被调度选中,立即开始执行

2)运行:占用CPU,正在运行中

3)休眠:暂不参与调度,等待特定事件发生

4)中止:已经运行完毕,等待回收线程资源

线程环境:

线程存在于进程之中,进程内所有全局资源对于内部每个线程都是可见的。

进程内典型全局资源如下:

1)代码区:这意味着当前进程空间内所有的可见的函数代码,对于每个线程来说,也是可见的

2)静态存储区:全局变量,静态空间

3)动态存储区:堆空间

线程内典型的局部资源:

1)本地栈空间:存放本线程的函数调用栈,函数内部的局部变量等

2)部分寄存器变量:线程下一步要执行代码的指针偏移量

一个进程发起后,会首先生成一个缺省的线程,通常称这个线程为主线程,C/C++程序中,主线程就是通过main函数进入的线程,由主线程衍生的线程成为从线程,从线程也可以有自己的入口函数,相当于主线程的main函数,这个函数由用户指定。通过thread构造函数中传入函数指针实现,在指定线程入口函数时,也可以指定入口函数的参数。就像main函数有固定的格式要求一样,线程的入口函数也可以有固定的格式要求,参数通常都是void*类型,返回类型根据协议的不同也不同,pthread中是void*,winapi中是unsigned int,而且都是全局函数。

最常见的线程模型中,除主线程较为特殊之外,其他线程一旦被创建,相互之间就是对等关系,不存在隐含的层次关系。每个进程可创建的最大线程数由具体实现决定。

无论在windows中还是Posix中,主线程和子线程的默认关系是:无论子线程执行完毕与否,一旦主线程执行完毕退出,所有子线程执行都会终止。这时整个进程结束或僵死,部分线程保持一种终止执行但还未销毁的状态,而进程必须在其所有线程销毁后销毁,这时进程处于僵死状态。线程函数执行完毕退出,或以其他非常方式终止,线程进入终止态,但是为线程分配的系统资源不一定释放,可能在系统重启之前,一直都不能释放,终止态的线程,仍旧作为一个线程实体存在于操作系统中,什么时候销毁,取决于线程属性。在这种情况下,主线程和子线程通常定义以下两种关系:

1、可会合(joinable):这种关系下,主线程需要明确执行等待操作,在子线程结束后,主线程的等待操作执行完毕,子线程和主线程会合,这时主线程继续执行等待操作之后的下一步操作。主线程必须会合可会合的子线程。在主线程的线程函数内部调用子线程对象的wait函数实现,即使子线程能够在主线程之前执行完毕,进入终止态,也必须执行会合操作,否则,系统永远不会主动销毁线程,分配给该线程的系统资源也永远不会释放。

2、相分离(detached):表示子线程无需和主线程会合,也就是相分离的,这种情况下,子线程一旦进入终止状态,这种方式常用在线程数较多的情况下,有时让主线程逐个等待子线程结束,或者让主线程安排每个子线程结束的等待顺序,是很困难或不可能的,所以在并发子线程较多的情况下,这种方式也会经常使用。

在任何一个时间点上,线程是可结合(joinable)或者是可分离的(detached),一个可结合的线程能够被其他线程回收资源和杀死,在被其他线程回收之前,它的存储器资源如栈,是不释放的,相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。

线程的分离状态决定一个线程以什么样的方式来终止自己,在默认的情况下,线程是非分离状态的,这种情况下,原有的线程等待创建的线程结束,只有当pthread_join函数返回时,创建的线程才算终止,释放自己占用的系统资源,而分离线程没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。

转自:https://blog.csdn.net/c_base_jin/article/details/79233705

多线程join会和和detach分离的区别相关推荐

  1. python3 线程 join_python 多线程 join start

    python 多线程 join start 线程的几个状态初始(NEW):新创建了一个线程对象,但还没有调用START()方法. 运行(RUNNABLE):线程中将就绪(READY)和运行(RUNNI ...

  2. 多线程 join 方法

    多线程 join 方法 1.前言 本节对 join 方法进行深入的剖析,主要内容点如下: 了解 join 方法的作用,初步的理解 join 方法的使用带来的效果是学习本节内容的基础: 了解 join ...

  3. sql语句中left join和inner join中的on与where的区别分析

    原文:sql语句中left join和inner join中的on与where的区别分析 关于SQL SERVER的表联接查询INNER JOIN .LEFT JOIN和RIGHT JOIN,经常会用 ...

  4. Jquery empty() remove() detach() 方法的区别

    方法简介: empty() This method removes not only child (and other descendant) elements, but also any text ...

  5. Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对 于Select出来的结果集是什么样子有点不是很清楚.Codi ...

  6. 图解SQL inner join、left join、right join、full outer join、union、union all的区别

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对 于Select出来的结果集是什么样子有点不是很清楚.Codi ...

  7. 前后端分离开发的理解以及和前后端不分离的区别

    一.前后端分离的概念 前后端分离 前后端分离是一种架构模式,说通俗点就是后端项目里面看不到页面(JSP | HTML),后端给前端提供接口,前端调用后端提供的 REST 风格接口就行,前端专注写页面( ...

  8. 26.多线程join detach

    1 #include <iostream> 2 #include <thread> 3 #include <array> 4 #include <Window ...

  9. 【Boost】boost库中thread多线程详解12——线程的分离与非分离

    Boos::thread线程的默认属性为非分离状态,线程结束后线程标识符.线程退出状态等信息需要通过join方法回收. boost::thread thread_func(func); thread_ ...

最新文章

  1. 来深入了解一下 Eureka 的工作机制及相关原理
  2. android studio 开发android app 真机调试
  3. Python3类方法和静态方法
  4. 创建微服务架构的步骤_成功备战微服务的5个准备步骤
  5. ICCV 2019 | VrR-VG:聚焦视觉相关关系
  6. python连不上树莓派_Python实现树莓派WiFi断线自动重连
  7. 前端学习(500):水平居中布局得第二种方式
  8. 会计专业领域计算机应用系统,信息技术在会计专业领域中的应用
  9. python程序设计简明教程知识点总结_Python程序设计简明教程 在线阅读
  10. mysql把结果变横表_mysql纵表与横表转换实例
  11. Ubuntu21.04 安装 VLC视频播放器
  12. 我妈打电话过来叫我不要搀扶路边摔倒的老奶奶——续 暨《南风窗》某文章读后感
  13. Hack the box靶机 Blunder
  14. 程序员女朋友礼物python代码_程序员到底该怎么给女朋友挑礼物
  15. 最大似然函数,琴生不等式
  16. FreeMarker生成复杂word(包含图片,表格)
  17. ubuntu更新软件包命令_从Ubuntu命令行查看哪些更新的软件包可用
  18. Arduino引用第三方库ads1x15提示No such file or directory
  19. JAVA拾遗 — JMH与8个代码陷阱
  20. 简单聊一聊UseCompressedOops UseCompressedClassPointers这两个JVM参数

热门文章

  1. error: the following arguments are required: --cfg
  2. C++ Primer 学习笔记 第十章 泛型算法
  3. C++deque介绍
  4. 阿里云ssl证书文件验证不通过
  5. 可信计算机组成部门的事,一文了解可信计算基(TCB):信息安全的基础
  6. 计算机专用单词缩写汇总
  7. JSON串 转成 指定实体类对象( TypeReference<>() {} )
  8. 数据挖掘导论 笔记5
  9. html input框的样式修改
  10. 致我们即将逝去的青春,文字控吧