线程的退出

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

线程间的顺序问题;

//同步操作

强调的是线程的 顺序问题

信号量 //交通信号灯

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

信号量的本质:

一把锁

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

相关推荐
景同学17 分钟前
把 AI 用到线上运维:可行、有效,前提是喂足信息——一次 Full GC 排障实录
java·人工智能·后端
库克克26 分钟前
【C++】set 与multiset
开发语言·c++
Wang's Blog38 分钟前
Go-Zero项目开发34: 微服务超时控制与重试机制实践
开发语言·微服务·golang·go-zero
C++、Java和Python的菜鸟41 分钟前
第7章 后端Web实战(Tlias系统)
java
憧憬成为java架构高手的小白1 小时前
黑马八股--spring框架学习
java·学习·spring
唐青枫2 小时前
Java Picocli 实战详解:用注解写出好用的命令行工具
java
2zcode2 小时前
项目文档:基于MATLAB神经网络的心力衰竭预测与临床辅助决策系统研究
开发语言·神经网络·matlab·心力衰竭预测\
X-⃢_⃢-X2 小时前
四、OpenFeign远程调用
java·微服务·springboot·springcloud
减瓦2 小时前
深入 Quarkus:云原生时代 Java 的重生之路
java·开发语言·云原生
杨运交2 小时前
[053][核心模块]Java枚举缓存与ORM集成实践
java·开发语言·缓存