线程的退出

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

线程间的顺序问题;

//同步操作

强调的是线程的 顺序问题

信号量 //交通信号灯

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

信号量的本质:

一把锁

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

相关推荐
Theodore_10222 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸4 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象4 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了4 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
----云烟----4 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024065 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
小二·5 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic5 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it5 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
懒洋洋大魔王5 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq