线程第二部分

一、线程退出

1.线程结束方式:

1.pthread_exit

2.在线程执行函数中return (此时与1式相等)

3.pthread_cancel:

4.任何一个线程调用了exit 或者 主线程main函数return 都会使进程结束

2.pthread_cancel:int pthread_cancel()pthread_t thread);

参数:thread: 表示所要取消线程的tid号

成功返回0 失败返回错误码

3.线程资源回收:

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

2.pthread_detach 可分离属性 --子线程运行很久才结束 - 设置分离属性一般为系统回收

4.pthread_detach:int pthread_detach(pthread_t thread) ;

参数:thread :要分离线程的tid

成功返回0 失败返回错误码

一般在线程创建好后立马分离,以防线程运行过快而在未分离前结束

二、线程与进程对比

  1. 线程 : CPU执行的最小单位

进程 : 资源分配和任务调度基本单位

2、各自特点(优缺点)

1.创建 和 调度

线程:创建速度快 调度速度快 //并发程度更高

2.安全性

线程:优点:共享了进程的数据空间 共享数据方面 方便

缺点: 安全性不好

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

进程(进程空间相互独立):

优点:安全性好

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

3.编程

线程(多线程)复杂程度高于进程

4.线程间的资源竞争:

共享资源:临界资源

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

机制: 互斥锁:互斥 排他性 ---要么不访问 要访问就是一次完整的操作(原子操作)

锁 :软件层面上的锁

5.锁的操作机制:定义互斥锁----初始化锁----加锁-----解锁-----销毁锁

6.定义互斥锁: pthread_mutex_t mutex:

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

初始化锁:pthread_mutex_init();

参数:第一个为要初始化的互斥锁变量,第二个为属性,一般默认为NULL普通锁

加锁: pthread_mutex_lock(); (阻塞操作)

解锁: pthread_mutex_unlock();

销毁:pthread_mutex_destroy();

尝试锁:pthread_mutex_trylock();(尝试锁,避免陷入死锁)(非阻塞操作)

参数均为要操作的那把锁

7.死锁:产生的四大条件,缺一不可:

1、互斥条件

2、不可剥夺条件

3、请求与保持条件

4、循环等待条件

8.死锁处理:

1、预防死锁

2、避免死锁

3、死锁检测和解除

9.线程间的顺序问题:

同步操作 强调的是线程的顺序问题

信号量 交通信号灯 实现了一种可以让线程间有序访问临界资源的方式

信号量 --- 可以顺序操作的一把锁

相关推荐
lang20150928几秒前
Spring Boot 入门:5分钟搭建Hello World
java·spring boot·后端
失散1310 分钟前
分布式专题——47 ElasticSearch搜索相关性详解
java·分布式·elasticsearch·架构
爱喝白开水a10 分钟前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
serve the people12 分钟前
LangChain 表达式语言核心组合:Prompt + LLM + OutputParser
java·langchain·prompt
想ai抽14 分钟前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库
Neverfadeaway22 分钟前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
武子康23 分钟前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
杰克尼28 分钟前
JavaWeb_p165部门管理
java·开发语言·前端
longgyy38 分钟前
5 分钟用火山引擎 DeepSeek 调用大模型生成小红书文案
java·数据库·火山引擎
一成码农1 小时前
JavaSE面向对象(下)
java·开发语言