2024年8月15日嵌入式学习

今日主要学习线程和线程的互斥锁

pthread_cancel函数

它用于取消一个线程,当一个线程收到取消的申请时,他不会立即停止,而是在下一个取消点处结束运行,取消点是程序中一个特定的位置。如果线程在执行一个不可中断的系统调用,他将执行一到调用完成。

pthread_detach函数

可分离属可分离属性 ---子线程运行很久才结束 --- 设置分离属性

功能:

分离线程

参数:

thread 要分离的线程的tid

返回值:

成功 0

失败 错误码

总结

1.创建 -- pthread_create

2.执行 -- 线程执行函数

3.退出 -- pthread_exit

return //线程执行函数中

pthread_cancel

exit() //return 从main

4.资源回收

可结合性 --- pthread_join //这种用于 ,线程任务较短,主线程需要关心子线程状态

可分离性 --- pthread_detach //子程序执行任务较长,主线程也不需要关心子线程状态

对比 线程 和 进程

1.线程 vs 进程

线程 CPU执行的最小单位

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

  1. 各自特点 (优缺点)

//1.创建 和 调度

线程

创建速度快

调度速度快

//并发程度 更高

//2. 安全性

线程

好处:共享了进程的数据空间

共享数据方面 方便

缺点:

安全性不好 //

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

进程

进程空间相互独立

好处,

安全性好

缺点:

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

互斥锁

定义互斥锁:

pthread_mutex_t mutex;

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

初始化锁

pthread_mutex_init(); //初始化一把锁

参数:

@mutex //就是要初始化的 互斥锁变量

@attr //属性

//NULL 默认属性 --- 普通锁

//读写锁

加锁 //加锁 加在 要访问临界资源的地方

pthread_mutex_lock(); //上锁

解锁

pthread_mutex_unlock(); //解锁 临界资源访问之后就解开

销毁

pthread_mutex_destroy();//销毁一把锁

参数:

@mutex //要操作的那把锁

线程间的顺序问题:

//同步操作

强调的是线程的 顺序问题

信号量 //交通信号灯

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

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

相关推荐
m4Rk_10 分钟前
【论文阅读】Agent 记忆机制(27):MemRefine——用 LLM 事实判断将长期记忆压缩到固定预算
论文阅读·人工智能·学习
星恒随风25 分钟前
Linux 权限详解:从 rwx、chmod 到 umask、目录权限与粘滞位
linux·运维·服务器·笔记·学习
阳光九叶草LXGZXJ1 小时前
达梦数据库-报错-12-[-7184]:对象定义[XXX]被修改,版本检查失败
linux·运维·服务器·数据库·sql·学习
知识分享小能手4 小时前
高等数学学习教程,从入门到精通,定积分 — 知识点全面总结(10)
学习·机器学习·概率论
Java成神之路-11 小时前
G1 垃圾回收器 :SATB + TAMS核心机制深度解析
java·jvm
暗影凋落11 小时前
CMake构建学习笔记-SQLite库的构建
笔记·学习·sqlite
画面无声12 小时前
STM32的SPI通信原理与练习记录
c语言·stm32·单片机·嵌入式硬件·学习
你有哈莫吗13 小时前
CMake构建学习笔记-iconv库的构建
笔记·学习
Bruce_Liuxiaowei13 小时前
轻量级 IOC 管理方案:Streamlit 驱动的恶意IP情报平台
网络·jvm·网络协议·tcp/ip·安全
ctlover14 小时前
Python学习第4日
学习