Linux系统编程:线程 1

news2024/9/22 23:38:15

1.线程的概念

线程——轻量级的进程,线程是CPU执行的最小单位,进程是资源分配的基本单位,线程的创建和调度的时空开销都比进程小;

2.线程的组成

线程组成:线程pid,程序计数器,寄存器集合,栈;

3.线程与进程的关系

(1)线程存在于进程中;

(2)线程共享了进程的资源(代码段,数据段,打开的一些文件);

(3)线程结束不一定导致进程结束;

4.线程的编程过程

线程的编程过程类似于进程的编程过程:线程的创建,线程的执行,线程的结束,线程结束后的资源回收;

5.线程的创建 

头文件:#include <pthread.h>

pthread_t tid;     //获得tid号

int pthread_create(pthread_t *thread,

                                const pthread_attr_t *attr,

                                 void *(*start_routine) (void *), void *arg);

返回值:成功时返回0,失败时返回错误码;

功能:该函数可以创建指定的一个线程。

参数:

(1)thread 线程id,需要实现定义并由该函数返回。

(2)attr   线程属性,一般是NULL,表示默认属性。(可结合性+分离属性)
                 默认(可结合性) -- 自己手动回收
                 分离属性       -- 系统自动回收 
(3)start_routine  -- 线程执行函数 (线程回调函数)
         本质上是一个函数的名称即可, 线程回调函数 --完成线程任务功能的函数 ,需要调用者自己实现

(4)arg  回调函数的参数,即参数3的指针函数参数。

注:
   1. 主函数所在的执行流 --- 主线程 
   2. 其它的线程   ---  子线程(次线程)   
   3. 各个线程间 地位是平等

6.获得线程tid
 pthread_self():在哪个线程中调用,获得的就是那个线程的tid,用%ld保存tid号;

7.线程的执行

体现在线程的执行函数(回调函数)上;

8.线程的退出

void pthread_exit(void *retval)

功能:结束调用的线程 

参数:retval  //退出状态值  //传的是,退出状态值 对应的地址 

注意:

pthread_exit 本身表示结束线程,如果用在main函数中 表示结束主线程,主线程结束 并不表示进

程,此时,主线程执行流结束,进程会在其余线程都结束后结束;

9.线程的资源回收 

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

 功能:等待线程结束 

参数:(1)thread  --- 线程tid  (2)retval  --- 用来保存,退出状态值,所在空间的地址 

返回值:成功时返回0,失败时返回错误码 

注:

线程退出时,可以带出退出状态值,但是传的是,退出状态值对应空间的地址;

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

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

相关文章

pdf文件密码忘记,有办法可以打开pdf文件吗?

为确保PDF文件的重要信息不轻易外泄&#xff0c;我们一般会给pdf文件设置打开密码&#xff0c;确保pdf文件的隐私与安全&#xff0c;但随着时间的推移&#xff0c;让我们遗忘了原本设置的密码&#xff0c;这时我们该怎么办呢&#xff1f; 当大家遇到这种情况时&#xff0c;可能…

箱号/柜号是什么?各种单据处理有没有省力的办法?

集装箱编号&#xff0c;作为全球独一无二的标识符&#xff0c;其结构严谨且信息丰富。该编号由四部分构成&#xff1a;首先是三个字母组成的箱主代码&#xff0c;这代表了集装箱的拥有者&#xff0c;即船公司或租箱公司的专属标识&#xff1b;紧接着是固定字母“U”&#xff0c…

SpringBoot快速入门(自动创建)

目录 前言 步骤 1 创建项目 2 选择生成器springBoot 3 修改后&#xff0c;如图所示 4 点击下一步 5 点击Web----SpringWeb 6 点击创建 6.1 如果发生报错如: 6.2 替换合适版本&#xff0c;等待重新加载 7 添加contronller类 7.1 添加HelloController 类 8 ​​创建…

Linux驱动入门实验班——SR501红外模块驱动(附百问网视频链接)

目录 一、工作方式 二、接口图 三、编写思路 1.构造file_operations结构体 2.实现read函数 3.编写入口函数 4.编写中断处理函数 5.编写出口函数 6.声明出入口函数以及协议 四、源码 五、课程链接 一、工作方式 SR501人体红外感应模块有两种工作模式&#xff1a; …

PMP和软考高项知识的重叠和差异

PMP和高项是项目管理证书&#xff0c;备考了高项之后&#xff0c;也可以参加PMP考试&#xff0c;今天我们就来说一说PMP和高项知识的重叠度以及差异。&#xff08;文末PMP资料&#xff09; 一、知识体系的重叠 1、 项目管理过程 PMP和高项都强调项目管理的全过程&#xff0c;包…

电脑屏幕录制指南,2024四大免费录屏软件推荐!

无论是制作教学视频、录制在线课程、捕捉游戏精彩瞬间&#xff0c;还是进行远程技术支持&#xff0c;一款优秀的录屏软件都是必不可少的工具。今天&#xff0c;我们就来聊聊几款免费且功能强大的录屏软件。 Foxit录屏大师 链接&#xff1a;www.foxitsoftware.cn/REC/ Foxit录…

BGP 反射器联邦实验

要求&#xff1a; 1.如图连接网络&#xff0c;合理规划IP地址&#xff0c;AS 200内IGP协议为OSPF 2.R1属于AS 100&#xff1b;R2-R3-R4小AS 234 R5-R6-R7小AS 567&#xff0c;同时声明大AS 200&#xff0c;R8属于AS 300 3.R2-R5 R4-R7 之间为联邦EBGP邻居关系 4.R1-R8之…

实时捕捉与追溯:得物基于 eBPF 打造云上网络连接异常摄像头

近期我们容器 SRE 团队基于 eBPF 技术建设网络连接异常感知能力&#xff0c;灰度上线过程中发现了生产环境 10 以上的应用配置错误、程序 Bug 等问题。在和应用负责同学同步风险过程中&#xff0c;大家都挺好奇我们如何实现在对应用无侵入的情况下发现服务连接异常的。本篇文档…

贷齐乐hpp+php特性注入

文章目录 运行过程waf第一层waf拦截第二层waf拦截 数据库查询语句注入思路注入 运行过程 foreach ($_REQUEST as $key > $value) {$_REQUEST[$key] dowith_sql($value);}$request_uri explode("?", $_SERVER[REQUEST_URI]);if (isset($request_uri[1])) {$rewr…

77.游戏分析工具计算数据偏移

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;76.游戏分析工具读取内存存到对象数据分析器一 以它的代码为基础进行修改 COBJContext…

免费领取 | S-SDLC差距分析2024发布会,服务名额先到先得

​2024全新版S-SDLC研发安全能力成熟度模型即将发布&#xff01;可帮助企业进一步引入行业最佳实践&#xff0c;弥补安全开发能力短板&#xff0c;快速提升软件安全开发整体水平。 8月15日&#xff0c;我们将开启直播&#xff0c;正式发布2024全新版S-SDLC研发安全能力成熟度模…

代码随想录算法训练营第十五天

力扣题部分: 110.平衡二叉树 题目链接:. - 力扣&#xff08;LeetCode&#xff09; 题面: 给定一个二叉树&#xff0c;判断它是否是平衡二叉树 平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1 思路(递归): 还是递归三部曲(关于三部曲的具体内容和对递归看法建议可见昨…

Vulnhub JIS-CTF靶机详解

项目地址 https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/ 修改靶机的网卡 开机时长按shift&#xff0c;进入此页面 选择root模式进入 将只读模式改为读写模式 mount -o remount,rw / 查看本机的网卡名称 …

【数据分享】《青海省统计年鉴》2000-2023

而今天要限时免费分享的数据就是2000-2023年间出版的《青海省统计年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 青海省&#xff0c;位于中国西北部&#xff0c;青藏高原的东北部&#xff0c;是一个资源丰富、民族众多的地区。…

利用WebSocket实现来单提醒和用户催单

文章目录 概要整体架构流程技术细节小结 概要 来单提醒&#xff1a; 业务场景&#xff1a;在电商平台、外卖平台等应用场景中&#xff0c;当有新的订单产生时&#xff0c;系统需要及时通知相关人员处理新订单。 目的&#xff1a;确保订单能够得到快速响应&#xff0c;提高客户…

XSS盲打与cookie劫持

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 XSS盲打&#xff08;加载远程攻击payload&#xff09; XSS偷cookie cookie收集 在线XSS收集平台的使用 1. BeeF框架的使用 BeeF简介 安装和使用 XSS 一些实战应用 1. XSS PDF 2. 公网投毒 3. 网站挂马…

WUP-CH34X ch34x系列芯片USB转串口通信uniapp插件使用说明

插件地址&#xff1a;WUP-CH34X 系列芯片USB转串口通信安卓库 简介 本文档是针对 CH340/CH341/CH342/CH343/CH344/CH347/CH9101/CH9102/CH9103/CH9104/CH9143的 USB 转串口安卓库的开发说明文档。 主要介绍如何使用芯片的 USB 转异步串口功能&#xff08;以下简称 CH34XUART…

python 使用正则表达式判断图片路径是否是超链接

在Python中&#xff0c;判断一个给定的字符串&#xff08;假设为图片路径&#xff09;是否是网页链接&#xff08;URL&#xff09;&#xff0c;你可以通过检查该字符串是否符合URL的基本格式来实现。虽然这个方法不能保证链接一定指向图片&#xff0c;但它能判断该字符串是否是…

La-Z-Boy EDI项目测试流程详解

在此前的文章《家居EDI&#xff1a;La-Z-Boy EDI 项目案例》中&#xff0c;为大家介绍了La-Z-Boy的EDI 需求以及在知行之桥EDI系统中的具体实现&#xff0c;本文主要为大家介绍La-Z-Boy EDI项目测试流程。 梳理需求文档 La-Z-Boy 提供的EDI资料主要包括&#xff1a;EDI 850订…

在IntelliJ IDEA中利用Git拉取项目

1 访问gitee或github&#xff0c;找到项目对应的仓库&#xff0c;并复制仓库地址。 2 打开IDEA&#xff0c;依次选择菜单:File->New->Project from Version Control 3 在弹出框中输入仓库路径(从第一步中gitee或github复制的路径)并点击Clone 4 在弹出框中输入gite…