线程的退出

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

线程间的顺序问题;

//同步操作

强调的是线程的 顺序问题

信号量 //交通信号灯

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

信号量的本质:

一把锁

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

相关推荐
学逆向的几秒前
C 内存属性
c语言·开发语言·算法·网络安全
Carol063016 分钟前
上肢及肩肘关节
java·服务器·数据库
yliucherish23 分钟前
Log4Shell 复现实录:我读 OpenJDK 源码,发现两道防线的默认值竟然相反
java
维拉德31 分钟前
Java新人第一次接打标需求:从抓包找接口到客户端展示
java
luobobo89640 分钟前
支付回调验签连续失败三天,最后发现是网关的时间戳单位问题
java
BBmmo40 分钟前
Java InputStream.read() 为什么返回 int?
java
Nuanyt1 小时前
LeetCode Hot100 刷题笔记 · 普通数组专题
java·笔记·算法·leetcode
HAPPY酷2 小时前
C++ 自定义内存池优化点云处理:从裸指针到 RAII 自动回收
开发语言·c++
梦帮科技2 小时前
量子纠缠网络与量子隐形传态攻防:量子中继器信道串扰、纠缠态保真度降解与量子路由劫持
开发语言·网络·人工智能·算法·自动化·php