线程的退出

方式1

pthread_exit

Void pthread_exit (void *retval)

功能:

结束调用的线程

参数:

retval //退出状态值 //需要传的是,退出状态值的地址

注意:

1.pthread_exit 本身表示结束线程

如果用在main函数中 表示结束主线程

主线程结束 并不表示进程

方式2:

在次线程中return

此时的效果相当于调用了pthread_exit()

方式3:

调用pthread_cancel(pthread_t pthread)

功能:

通过发送取消的请求来结束次线程

参数;

pthread:要结束的线程的tid号

线程的资源回收

Int pthread_join(pthread_t thread,void **retval)

功能:

等待线程结束

参数:

返回值:

成功 0

失败 错误码

注:

线程退出时,可以带出退户状态值

但是传的是

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

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

函数:

Pthread_detach()

Int pthread_detach(pthread_t thread);

功能:

分离线程

参数:

thread 要分离的线程的tid

返回值:

成功 0

失败 错误码

对比 线程 和 进程

1.线程 vs 进程

线程 cpu 执行的最小单位

进程 资源分配和任务调度的最小单位

2.各自特点(优缺点)

//1.创建 和 调度

线程

创建速度快

调度速度快

//线程的并发程度 更高

Time:获取可执行程序的运行时间

//2.安全性

线程

优点:因为共享了进程的数据空间,所以在共享数据方面,更方便

缺点:安全性不好

带来了资源竞争 //专门的技术 解决资源竞争 ----互斥 同步

进程

优点:进程空间相互独立,好处就是安全性更高

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

线程间的资源竞争:

共享资源:临界资源

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

机制:

互斥锁

互斥 排他性

定义互斥锁:

pthread_mutex_t mutex;

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

加锁: //加锁 加在 要访问临界资源的地方

Pthread_mutex_lock() //加锁

解锁: //临界资源访问完就解锁

Pthread_mutex_unlock() //解锁

销毁:

Pthread_mutex_destory() //销毁一把锁

因为使用锁的时候会占用一部分硬件资源,如果不销毁的话,硬件资源不会被释放

Pthread_mutex_init()

功能:

初始化 互斥锁

int pthread_mutex_init(

总结:

//锁是一种线程间 同步机制

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

保证每个线程访问时的原子性操作(不可分割)

//操作

//初始化 一把锁

// 动态初始化pthread_mutex_init

// 静态初始化 用初始化的宏

// 加锁

// 解锁

// 销毁

处理错误:

全局变量的默认初始值为0

线程间的顺序问题;

//同步操作

强调的是线程的 顺序问题

信号量 //交通信号灯

//实现一种可以让线程之间有序访问的=临界资源的方式

信号量的本质:

一把锁

//一把可以顺序操作的锁

相关推荐
S***26752 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
汤姆yu2 小时前
基于python的外卖配送及数据分析系统
开发语言·python·外卖分析
Yue丶越2 小时前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
马剑威(威哥爱编程)2 小时前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
JIngJaneIL2 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
翔云 OCR API2 小时前
人脸识别API开发者对接代码示例
开发语言·人工智能·python·计算机视觉·ocr
V***u4533 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
这是程序猿3 小时前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
芳草萋萋鹦鹉洲哦3 小时前
【elemen/js】阻塞UI线程导致的开关卡顿如何优化
开发语言·javascript·ui
爱学习的小邓同学3 小时前
C++ --- 多态
开发语言·c++