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 //要操作的那把锁

线程间的顺序问题:

//同步操作

强调的是线程的 顺序问题

信号量 //交通信号灯

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

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

相关推荐
Include everything1 小时前
Rust学习笔记(三)|所有权机制 Ownership
笔记·学习·rust
杜子不疼.1 小时前
《Python学习之文件操作:从入门到精通》
数据库·python·学习
★YUI★1 小时前
学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
java·学习·游戏·unity·c#
livemetee2 小时前
Flink2.0学习笔记:Flink服务器搭建与flink作业提交
大数据·笔记·学习·flink
长臂人猿3 小时前
JVM常用工具:jstat、jmap、jstack
linux·运维·jvm
INS_KF3 小时前
【C++知识杂记2】free和delete区别
c++·笔记·学习
柠檬味的薄荷心3 小时前
【C#补全计划】多线程
jvm
啊阿狸不会拉杆4 小时前
《算法导论》第 27 章 - 多线程算法
java·jvm·c++·算法·图论
Easocen4 小时前
Mybatis学习笔记(五)
笔记·学习·mybatis
丑小鸭是白天鹅5 小时前
嵌入式C语言学习笔记之枚举、联合体
c语言·笔记·学习