返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中thread库join和detach的区别有哪些
  • 822
分享到

C++中thread库join和detach的区别有哪些

2023-06-25 16:06:27 822人浏览 泡泡鱼
摘要

本篇内容介绍了“c++中thread库join和detach的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!线程状态在一个线程的生

本篇内容介绍了“c++中thread库join和detach的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    线程状态

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

    • 就绪态:参与调度,等待被执行,一旦被CPU选中,就立即开始执行。

    • 运行态:占用CPU,正在被运行。

    • 休眠态:暂不参与调度,等待特定的事件发生后转化为就绪态。

    • 中止态:已经运行完毕,等待回收线程资源。

    线程环境

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

    进程内典型的全局资源(线程可见资源)如下:

    • 代码区:意味着当前进程空间内所有的函数代码均可见,对于每个线程来说,都是可见的。

    • 静态存储区:全局变量、可访问的静态变量。

    • 动态存储区:动态生成的变量(new)。

    线程内典型的局部资源如下

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

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

    join和detach的区别

    一个进程发起后,会首先生成一个缺省的线程,通常称这个线程为主线程,C/C++程序中,主线程就是通过main函数进入的线程,由主线程衍生的线程成为从线程(也称之为子线程),从线程也可以有自己的入口函数,相当于主线程的main函数,这个函数由用户指定。通常使用thread创建子线程。通过thread构造函数中传入函数指针实现,在指定线程入口函数时,也可以指定入口函数的参数。

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

    无论在windows中还是Posix中,主线程和子线程的默认关系都是:无论子线程执行完毕与否,一旦主线程执行完毕退出,所有子线程执行都会终止。部分线程保持一种终止执行但还未销毁的状态,而进程必须在其所有线程销毁后销毁,这时整个进程处于僵死状态(可能造成程序崩溃)。

    在这种情况下,主线程和子线程通常定义以下两种关系:

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

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

    “C++中thread库join和detach的区别有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    --结束END--

    本文标题: C++中thread库join和detach的区别有哪些

    本文链接: https://lsjlt.com/news/305923.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • C++中thread库join和detach的区别有哪些
      本篇内容介绍了“C++中thread库join和detach的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!线程状态在一个线程的生...
      99+
      2023-06-25
    • 浅谈C++中thread库join和detach的区别
      目录C++11中thread库join和detach的区别线程状态线程环境join和detach的区别总结C++11中thread库join和detach的区别 线程状态 在一个线程...
      99+
      2024-04-02
    • C++中thread和pthread的区别有哪些
      C++中的thread是C++11标准引入的线程库,而pthread是POSIX标准中定义的线程库。它们之间的主要区别如下:1. 语...
      99+
      2023-10-20
      C++
    • java中Runnable和Thread的区别有哪些
      这篇文章将为大家详细讲解有关java中Runnable和Thread的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Run...
      99+
      2023-06-02
    • 数据库中的left join与right join的区别有哪些
      这篇文章主要介绍“数据库中的left join与right join的区别有哪些”,在日常操作中,相信很多人在数据库中的left join与right join的区别有哪些问题上存在疑惑,小编查阅了各式资料...
      99+
      2024-04-02
    • 在jQuery库中dom节点删除方法detach()和remove()有哪些区别
      这篇文章给大家分享的是有关在jQuery库中dom节点删除方法detach()和remove()有哪些区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。jquery是什么jquery是一个简洁而快速的JavaSc...
      99+
      2023-06-14
    • detach()和remove()在jquery中有什么区别
      detach()和remove()在jquery中有什么区别?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。jquery是什么jquery是一个简洁而快速的Jav...
      99+
      2023-06-14
    • c#和java的区别有哪些
      Java和C#都是编程的语言,它们是两个不同方向的两种语言。相同点:他们都是面向对象的语言,也就是说,它们都能实现面向对象的思想(封装、继承、多态)。区别:1.c#中的命名空间是namespace类似于Java中的package(包),在J...
      99+
      2021-05-04
      java教程 c# java 区别
    • c++和javascript的区别有哪些
      本篇文章为大家展示了c++和javascript的区别有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。区别:1、C++是静态语言,而javascript是动态语...
      99+
      2024-04-02
    • java和c++的区别有哪些
      这篇文章主要介绍java和c++的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!区别:Java不可以将一个非布尔值当做布尔值在逻辑表达式中使用,C++却可以。C++引入了操作符重载机制,Java不支持。C+...
      99+
      2023-06-14
    • c#和JavaScript有哪些区别
      这篇文章将为大家详细讲解有关c#和JavaScript有哪些区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 区别:1、JavaScript...
      99+
      2024-04-02
    • C#中Backgroundworker与Thread的区别
      目录1.Backgroundworker2.Thread3.总结最近项目要用到,窗体Form程序要在后台开启几个子线程,负责和其他端进行通信,异步读写,并且来更改UI。在网上查了有B...
      99+
      2024-04-02
    • C语言和C#有哪些区别
      这篇文章主要介绍“C语言和C#有哪些区别”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言和C#有哪些区别”文章能帮助大家解决问题。C#是三大主流OOP(面向对象编程)语言(C++,Java,C#...
      99+
      2023-06-27
    • c++ primer和plus的区别有哪些
      C++ Primer和C++ Primer Plus是两本不同的C++教程书籍。下面是它们之间的一些区别:1. 作者:C++ Pri...
      99+
      2023-10-08
      c++
    • sql中join on和join in的区别
      join on 和 join in 的区别在于:1. join on 使用相等比较条件,而 join in 可以使用任何比较运算符;2. join in 支持子查询,而 join on ...
      99+
      2024-05-08
    • C++ class和struct有哪些区别
      这篇文章将为大家详细讲解有关C++ class和struct有哪些区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct ...
      99+
      2023-06-06
    • Java中Runnable和Thread有什么区别
      这篇文章给大家介绍Java中Runnable和Thread有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Threa...
      99+
      2023-06-17
    • C语言中scanf和printf的区别有哪些
      这篇文章将为大家详细讲解有关C语言中scanf和printf的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。区别:scanf是输入函数,用于从标准输入设备(一般是键盘)输入数据;而printf是...
      99+
      2023-06-14
    • c语言中abs()和fabs()的区别有哪些
      这篇“c语言中abs()和fabs()的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“c语言中abs()和fabs...
      99+
      2023-06-17
    • c语言中*p和p的区别有哪些
      这篇文章主要讲解了“c语言中*p和p的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言中*p和p的区别有哪些”吧!区别:1、表示的含义不同,“*p”表示此指针指向的内存地址中存...
      99+
      2023-07-04
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作