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

线程间的顺序问题:

//同步操作

强调的是线程的 顺序问题

信号量 //交通信号灯

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

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

相关推荐
索然无味io20 分钟前
XML外部实体注入--漏洞利用
xml·前端·笔记·学习·web安全·网络安全·php
一弓虽30 分钟前
java基础学习——jdbc基础知识详细介绍
java·学习·jdbc·连接池
日月星宿~33 分钟前
【JVM】GC
jvm
五味香1 小时前
Java学习,List 元素替换
android·java·开发语言·python·学习·golang·kotlin
Clockwiseee3 小时前
docker学习
学习·docker·eureka
lozhyf3 小时前
Go语言-学习一
开发语言·学习·golang
小小小小关同学3 小时前
【JVM】垃圾收集器详解
java·jvm·算法
日月星宿~3 小时前
【JVM】调优
java·开发语言·jvm
mascon4 小时前
U3D的.Net学习
学习
加德霍克4 小时前
【机器学习】使用scikit-learn中的KNN包实现对鸢尾花数据集或者自定义数据集的的预测
人工智能·python·学习·机器学习·作业