线程的退出

方式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

线程间的顺序问题;

//同步操作

强调的是线程的 顺序问题

信号量 //交通信号灯

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

信号量的本质:

一把锁

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

相关推荐
重生之我在20年代敲代码7 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
爱上语文9 分钟前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
serve the people12 分钟前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
qmx_071 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战1 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
2401_858286113 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py3 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy3 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript