8.【Linux】线程

进程与线程比较

来自小林codeing
具体参考
小林coding

线程的上下文切换

当两个线程是属于同一个进程,因为虚拟内存是共享的,所以在切换时,虚拟内存这些资源就保持不动,只需要切换线程的栈、寄存器等不共享的数据。
当两个线程不属于同一个进程,就进行进程的上下文切换

知识点

用户线程的整个线程管理和调度,操作系统是不直接参与的,而是由用户级线程库函数来完成线程的管理,包括线程的创建、终止、同步和调度等。
Linux 下的线程是轻量级进程,没有真正意义上的线程结构,没有为线程专门设计内核数据结构,而是通过 PCB 来模拟实现出线程的。
Linux 并不能直接给我们提供线程相关的接口,只能提供轻量级进程的接口!在用户层实现了一套多进程方案,以库的方式提供给用户进行使用,这个库就是pthread线程库(原生线程库)。

调度算法

在这里插入图片描述

线程库的函数

线程创建

在这里插入图片描述
pthread_ create函数会产生一个线程ID,存放在第一个参数指向的地址中。该线程ID和前面说的线程ID不是一回事。
前面讲的线程ID属于进程调度的范畴。因为线程是轻量级进程,是操作系统调度器的最小单位,所以需要一个数值来唯一表示该线程。
pthread_ create函数第一个参数指向一个虚拟内存单元,该内存单元的地址即为新创建线程的线程ID,属于NPTL线程库的范畴。线程库的后续操作,就是根据该线程ID来操作线程的。
在这里插入图片描述
可以看到线程独有的栈和其属性集合是在原生线程库中的。

线程终止

如果需要只终止某个线程而不终止整个进程,可以有三种方法:

1.从线程函数 return。这种方法对主线程不适用,从main 函数 return 相当于调用 exit。
2.线程可以调用 pthread_ exit 终止自己。
3.一个线程可以调用 pthread_ cancel 终止同一进程中的另一个线程。

注:在多线程场景下,不要使用 exit 函数,exit 函数是终止整个进程的

pthread_exit()

在这里插入图片描述
这里的retval一般是(void*)20,当作“返回值”,由pthread_join()接收

线程等待和线程分离

在这里插入图片描述

pthread_join()和pthread_detach()

1.linux线程pthread有两种状态joinable状态和unjoinable状态,如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符(总计8K多)。只有当你调用了pthread_join之后这些资源才会被释放。若是unjoinable状态的线程,这些资源在线程函数退出时或pthread_exit时自动会被释放。
2.unjoinable属性可以在pthread_create时指定,或在线程创建后在线程中pthread_detach自己, 如:pthread_detach(pthread_self()),将状态改为unjoinable状态,确保资源的释放。或者将线程置为joinable,然后适时调用pthread_join.
3.其实简单的说就是在线程函数头加上 pthread_detach(pthread_self())的话,线程状态改变,在函数尾部直接 pthread_exit线程就会自动退出。省去了给线程擦屁股的麻烦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS常见崩溃简介

1. 崩溃 多指在移动设备(如iOS、Android设备)中或不可移动设备(如:Windows、Linux等设备), 在打开或使用应用程序时出现的突然退出中断的情况(类似于Windows的应用程序崩溃)。 多表现为&#…

网络原理(3)——TCP协议

目录 一、连接管理 二、三次握手 1、何为三次握手? 2、三次握手有何意义? 三、四次挥手 三次握手和四次挥手的相似之处和不同之处 (1)相似之处 (2)不同之处 四、TCP的状态 建立连接: 断开…

linux系统中的PS命令详解

ps是一个常用的Linux/Unix命令,用于显示当前系统中的进程信息。它可以列出系统中正在运行的进程,并显示每个进程的详细信息,包括进程的PID(进程ID)、PPID(父进程ID)、CPU使用率、内存使用率、命…

【链表】算法例题

目录 八、 链表 57. 环形链表 ① 58. 两数相加 ② √ 59. 合并两个有序链表 ① √- 60. 随机链表的复制 ② 61. 反转链表II ② 62. K个一组翻转链表 ③ 63. 删除链表的倒数第N个结点 ② √- 64. 删除排序链表中的重复元素II ② √- 65. 旋转链表 ② √- 66. 分隔链…

MySQL 数据库的备份和还原

1.命令行 备份语法 mysqldump -u用户名 -p密码 数据库名称 > 保存的路径还原语法 1.登陆数据库 2.创建数据库 3.使用数据库 4.执行文件 source 文件路径2.图形化(太简单了不写了) 点击返回 MySQL 快速学习目录

全球首位AI程序员诞生,将会对程序员的影响有多大?

近期,全球首位AI程序员Devin的出场,不禁让我想到了一个有趣的问题:AI程序员会不会抢程序员的饭碗呢?先别着急下结论!虽然AI技术在编程领域越来越广泛,但它真的能完全替代我们程序员吗? 方向一&…

【中级软件设计师】上午题07-面向对象技术(通俗易懂版)

上午题07-面向对象技术 1 类2 对象和消息2.1 对象2.2 消息 3 方法重载4 封装5 继承6 多态7 静态、动态绑定8 面向对象设计原则9 面向对象分析与设计9.1 面向对象分析9.2 面向对象设计9.3 面向对象测试 1 类 实体、接口、控制 类是在对象之上的抽象,对象是类的具体…

安科瑞精密配电柜助力数据中心节能降耗

彭姝麟 Acrelpsl 1.趋势分析 能源支出作为数据中心运营的主要成本之一。清华大学能源互联网创新研究院常务副院长高文胜曾在公开场合指出,随着我国数据中心能源消耗的逐年攀升,电费支出约占数据中心年运营成本的95%。加之“双碳”战略的出台&#xff0c…

markdown支持的emoji表情

markdown-emoji Markdown语法支持添加 emoji 表情,输入不同的符号码(两个冒号包围的字符)可以显示出不同的表情 Emoji Cheat Sheet全列表参见:Emoji Cheat Sheet markdown-emoji 人物自然事物地点符号 人物 :bowtie: :bowtie…

ActiViz三维场景的基本要素——灯光

文章目录 一、ActiViz 中灯光的基本要素二、ActiViz 中灯光的使用方法三、ActiViz 中灯光的高级特性四、性能优化和注意事项五、总结一、ActiViz 中灯光的基本要素 灯光是在三维场景中模拟光照效果的重要组成部分。在 ActiViz 中,灯光具有多种类型和属性,可以通过设置这些属…

字符串(string)篇(一)

文章目录 1.1 capitalize()函数1.2 casefold()函数1.3 center()函数1.4 count()函数1.5 decode()函数1.6 encode()函数1.7 endswith()函数1.8 expandtabs()函数1.9 find()函数 1.1 capitalize()函数 在Python中,capitalize() 是一个字符串(string&#…

SkyWalking上报Java应用数据

重要 本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。 通过SkyWalking为应用埋点并上报链路数据至可观测链路 OpenTelemetry 版后,可观测链路 OpenTelemetry 版即可开始监控应用,您可以…

cyclictest 交叉编译报错---rt_numa.h:18:10: fatal error: numa.h: 没有那个文件或目录

cyclictest 主要是用于测试系统延时,进而判断系统的实时性 使用版本 rt-tests-2.6.tar.gz numactl v2.0.16 问题 编译时,需要先编译 numactl ,不然会有以下报错: arm-linux-gnueabihf-gcc -D VERSION2.6 -c src/cyclictest/c…

软考 网工 每日学习打卡 2024/3/19

学习内容 第8章 网络安全 本章主要讲解网络安全方面的基础知识和应用技术。针对考试应该掌握诸如数据加密、报文认 证、数字签名等基本理论,在此基础上深入理解网络安全协议的工作原理,并能够针对具体的 网络系统设计和实现简单的安全解决方案。 本章共有…

量化交易入门(七)Python开发-面向对象和类

在Python中,面向对象(OO)是一种编程范式或思想,它将现实世界中的实体抽象为对象(Object),通过对象之间的交互来解决问题,在量化交易中,它可以帮助我们更好地组织和管理复杂的交易策略和系统。在面向对象编程中,我们把数据和操作数据的方法封装在对象内部…

Day22初识集合

Day22初识集合 一、集合 1、概念: 集合是指将多个元素组合在一起的数据结构。在编程中,集合用于存储和操作一组相关的数据对象。与数组相比,集合具有更灵活、动态和高级的功能。 2、常见的集合类: List(列表&#x…

454.四数相加

给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 方法一&#xff1a; 双层for循环&#xff0c;将nums1、…

KY115 后缀字串排序

描述&#xff1a; 对于一个字符串&#xff0c;将其后缀子串进行排序&#xff0c;例如grain 其子串有&#xff1a; grain rain ain in n 然后对各子串按字典顺序排序&#xff0c;即&#xff1a; ain,grain,in,n,rain 输入描述&#xff1a; 每个案例为一行字符串。 输出描述&…

JS的Document属性和方法

在javascript中&#xff0c;document对象是一个非常重要的全局对象&#xff0c;它代表整个html文档。你可以通过document对象来访问和修改html文档的内容和结构。以下是一些常见的document属性和方法&#xff1a; 属性 1、document.title&#xff1a;获取或设置文档的标题&am…

HTML 特殊元素:展示PDF、展示JSON 数据

<pre> 标签 (preformatted text) <pre> 标签用来表示预格式化的文本内容 在页面数据展示时&#xff0c;后端返回了一段未经处理的JSON 数据&#xff0c;将这段数据在页面正常展示&#xff0c;让可读性更高。 {/"project": {/ "title": "…