线程|线程的使用、四种实现方式

news2024/11/17 12:54:21

1.线程的实现方式

1.用户级线程

开销小,用户空间就可以创建多个。缺点是:内核无法感知用户级多个线程的存在,把其当作只有一个线程,所以只会提供一个处理器。

2.内核级线程

相对于用户级开销稍微大一点,可以利用多个处理器。

3.组合级线程

在不同平台Linux 中线程的实现:

Linux 实现线程的机制非常独特。从内核的角度来说,它并没有线程这个概念。Linux 把所有的线程都当做进程来实现。内核并没有准备特别的调度算法或是定义特别的数据结构来表征线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一隶属于自己的 task_struct,所以在内核中,它看起来就像是一个普通的进程(只是线程和其他一些进程共享某些资源,如地址空间)。

2.线程的使用

2.1线程库的接口—pthread函数

1)pthread_create

#include <pthread.h>

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                        void *(*start_routine) (void *), void *arg);

pthread_create()创建一个新的线程,类似于创建新进程的fork函数


参数一:pthread_t *thread:指向一个pthread_t类型数据的指针,线程被创建时,这个指针指向的变量中会被写入一个标识符,我们用该标识符引用新线程;
thread:接收创建的新线程的ID,根据不同的ID名,对相应的线程做管理
参数二:const pthread_attr_t *attr
attr: 指定线程的属性,一般不设置特殊属性,设置该参数为NULL;
参数三:void *(*start_routine) (void *):参数为void类型指针,返回值也为指向void的指针的函数地址。告知新线程从这个函数指针指向的位置开始执行。
start_routine: 线程将要启动的指定线程函数
参数四:void *arg:给线程函数传递的参数指针
arg: 给线程函数传递的参数

//成功返回 0, 失败返回错误代码

2)pthread_join

int pthread_join(pthread_t thread, void **retval);

pthread_join()等待 thread 指定的线程退出,线程未退出时,该方法阻塞。等价于进程中用于收集子进程退出信息的wait函数。

参数一:pthread_t thread:指定将要等待的线程(此处用pthread_t变量名),
参数二:void **retval:是一个指针,它指向另一个指针,后者指向线程的退出信息。

//成功返回 0, 失败返回错误代码

3)pthread_exit

int pthread_exit(void *retval);

pthread_exit()线程通过调用此函数终止执行。等价于进程结束时调用exit函数退出

参数:void *retval:指向线程退出信息的指针或者说是线程退出时返回指向某个对象的指针,该对象不能是局部对象,因为此函数结束后,该局部变量就不存在了,会引起程序泄漏。

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

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

相关文章

【JavaSE】面向对象之继承

继承 继承概念继承的语法父类成员的访问子类和父类没有同名成员变量子类和父类有同名成员变量成员方法名字不同成员方法名字相同 super关键字子类构造方法super和this继承方式 继承概念 继承(inheritance)机制&#xff1a;是面向对象程序设计使代码可以复用的最重要的手段&…

分代收集 + 垃圾回收算法

分代假说 1. 弱分代假说&#xff08;Weak Generational Hypothesis&#xff09;&#xff1a;绝大多数对象都是朝生夕灭的 2. 强分代假说&#xff08;Strong Generational Hypothesis&#xff09;&#xff1a;熬过越多次垃圾收集过程的对象就越难以消亡 3. 跨代引用假说&…

网工软考 | 软考改机考,解读你最关心的5个问题

2023年下半年软考改为机考后&#xff0c;后台收到了很多的留言&#xff0c;大家对于实行机考的疑问还是有很多&#xff0c;例如要不要画图&#xff0c;用的什么输入法&#xff0c;报名费会不会涨价等。 今天就给大家解答一波。 01 软考改机考FAQ Q&#xff1a;软考机考会不会随…

华为内部,提拔项目经理的等级依据

大家好&#xff0c;我是老原。 最近和朋友吃饭&#xff0c;都在聊项目化&#xff0c;企业转型…… 要知道&#xff0c;一件事一旦到了饭桌上成了谈资&#xff0c;就说明它的趋势已经形成了。 这同时也表示&#xff0c;市场对项目经理的要求更高了。 早在2009年的高端项目经…

【eNSP】交换机(vlan和vlan间通信)

【eNSP】交换机&#xff08;vlan和vlan间通信&#xff09; 原理术语过程 实验根据图片连接模块配置设备名称和IP地址配置交换机交换机链路指定sw1配置sw2配置 设置网关交换机互联实验设置查看设置结果 ospf配置 原理 HUB集线器&#xff1a;它的作用可以简单的理解为将一些机器…

信捷 XDH Ethercat 高速计数器计数准确性

本人在X0,X1连手轮(手轮刻度100)&#xff0c;CNT_AB指令使用高速计数器HSC0,出现了计数值不对。 转1圈应该有计数值变化400&#xff0c;实际变化只有50左右&#xff0c;有时多于50&#xff0c;有时少于50。 检查发现SFD320等于4&#xff0c;是正确的&#xff0c;百般不得其解…

AI 与智能化 API 治理的探索实践

7月 Eolink 受邀参加 QECon 2023 全球软件质量&效能大会&#xff08;北京站&#xff09;。Eolink CEO 刘昊臻&#xff0c;发表了主题为**「AI 与智能化 API 治理的探索实践」**的演讲&#xff0c;分享 Eolink 在 API 全生命周期中治理实践与 AI 结合的探索。 Eolink 作为国…

String trim方法,使用前需要判空

背景是接口导入时&#xff0c;部分字段因为手动录入可能误输空格&#xff0c;所以需去掉前后空格&#xff0c;这些属性为非必填&#xff0c;所以未校验非空&#xff0c;引发空指针异常。 代码类似这样&#xff0c;未判断是否为空&#xff0c;直接trim,导致空指针异常 Testpubl…

【JVM】运行时数据区——自问自答

Q:Java 运行时数据区解构&#xff0c;哪些数据线程独占&#xff0c;哪些是线程共享&#xff1f;每个区域会产生GC和异常吗&#xff1f; 运行时数据区&#xff1a; 1、PC寄存器 2、堆区 3、JVM栈 4、Native栈 5、方法区 其中&#xff0c;PC寄存器、Native栈、JVM栈是线程独占的…

【Spring专题】Spring之Bean生命周期源码解析——阶段四(Bean销毁)(拓展,了解就好)

目录 前言阅读建议 课程内容一、Bean什么时候销毁二、实现自定义的Bean销毁逻辑2.1 实现DisposableBean或者AutoCloseable接口2.2 使用PreDestroy注解2.3 其他方式&#xff08;手动指定销毁方法名字&#xff09; 三、注册销毁Bean过程及方法详解3.1 AbstractBeanFactory#requir…

python列表笔记,python列表用法及基础操作

列表的介绍 定义100个变量&#xff0c;每个变量存放一个学生的姓名可行吗&#xff1f;有更好的办法吗&#xff1f; 答&#xff1a; 列表 一、列表的格式 定义列的格式&#xff1a;[元素1, 元素2, 元素3, ..., 元素n] 变量tmp的类型为列表 tmp [xiaoWang,180, 65.0] 列…

数模论文写作细节要求

目录 优秀论文必要条件 数学建模的基本思路 第一步&#xff1a;了解问题——查文献、找数据 第二步&#xff1a;阐述要解决什么问题、用什么方法 其余步骤&#xff1a;给出数学模型、计算求解、对比结果与真实情况、应用于现实问题。 使用某种数学方法的理由和依据 创…

【SAP-MDG】MDG配置-配置工作流任务 Configure Workflow Tasks

一、配置工作流任务的前提&#xff1a; 1.工作流能启动的常规设置已设置完毕&#xff1b;&#xff08;前面提到的内容&#xff09; 2.配置目录&#xff1a;SPRO→SAP NetWeaver→Application Server→Business Management→SAP Business Workflow.&#xff08;SPRO→SAP NetW…

Splashtop:适合旅行办公人士的远程工作解决方案

无论是重要的商务旅行&#xff0c;还是旅游度假&#xff0c;还是数字游牧生活方式的诱惑&#xff0c;许多人都会发现自己在机场贵宾室制作演示文稿&#xff0c;在古雅的咖啡馆参加虚拟会议&#xff0c;或者在偏远海滩的宁静背景下集思广益。 随处远程办公的生活让人向往。尽管…

5G科技防汛,助力守护一方平安

“立秋虽已至&#xff0c;炎夏尚还在”&#xff0c;受台风席卷以及季节性影响全国多地正面临强降水的严峻挑战。“落雨又顺秋&#xff0c;绵绵雨不休”&#xff0c;正值“七下八上” 防汛关键时期&#xff0c;贵州省水文水资源局已全面进入备战状态。 为确保及时响应做好防汛抢…

Linux SIGCHLD信号

在子进程结束之后&#xff0c;会默认给父进程发送SIGCHLD信号。 有以下代码&#xff1a; 编译并运行以上代码&#xff1a; 可以看到在子进程结束之后&#xff0c;将SIGCHLD信号发送给了父进程&#xff0c;然后输出SIGCHLD信号的代号17。 在后台运行以上代码并查看进程信息&am…

IDEAdebug调试时查看时间戳和Date类型的对象,格式化为yyyy-mm-hh

平时debug时遇到Date或者时间戳时看时间不好判断到底是几月几号&#xff0c;希望直接格式化为想要的格式 比如 下面&#xff0c;Date直接显示为 yyyy-mm-hh的格式 解决方案&#xff1a; 无需下载插件&#xff0c;如图 //Date格式化 return new SimpleDateFormat("…

SIP网络音频模块SV-2401V网络对讲音频模块(支持POE)

功能和特点 音频工作方式&#xff1a; 音频解码&#xff1a;即音频播放。接收来自网络的音频流&#xff0c;经过模块解码后通过线路输出高质量音频信号。目前支持可以播放以下音频格式&#xff1a;MP3、WAV (PCM IMA ADPCM)、G.711、G.722等&#xff0c;可以播放最高48k采样率…

汽车租赁管理系统/汽车租赁网站的设计与实现

摘 要 租赁汽车走进社区&#xff0c;走进生活&#xff0c;成为当今生活中不可缺少的一部分。随着汽车租赁业的发展&#xff0c;加强管理和规范管理司促进汽车租赁业健康发展的重要推动力。汽车租赁业为道路运输车辆一种新的融资服务形式、广大人民群众一种新的出行消费方式和…

每天一道leetcode:934. 最短的桥(图论中等广度优先遍历)

今日份题目&#xff1a; 给你一个大小为 n x n 的二元矩阵 grid &#xff0c;其中 1 表示陆地&#xff0c;0 表示水域。 岛 是由四面相连的 1 形成的一个最大组&#xff0c;即不会与非组内的任何其他 1 相连。grid 中 恰好存在两座岛 。 你可以将任意数量的 0 变为 1 &#…