RTT的线程同步篇——总结
一、信号量和互斥量的区别
2018年12月29日
10:47
信号量强调做事的步骤,有先后。
信号量可以在任何任务、中断里释放信号量,释放了你才能做下一步。
信号量可能发生优先级翻转。
信号量不能递归获取,否则会把自己给挂起来的
互斥量强调所有权。独霸天下,我用的时候谁都不能用。
互斥量可以自己重复获取互斥量,递归的获取而不会被挂起,这就是所有权独霸权。
互斥量具有防止优先级反转的机制:优先级继承——互斥量被使用时,当被别的高优先级线程获取时,使用它的线程将临时提高线程的优先级和刚才获取互斥量的线程的优先级一样高。当持有者释放时才会恢复原来的优先级、并恢复最高优先级的被互斥量挂起的线程并执行调度。
应用场景:信号量,比如触控笔点击屏幕产生中断释放信号量对应线程运行。
互斥量:IIC总线的使用,其中一个设备在使用那么其他总线中的设备不能占用总线,这就需要互斥量来锁定。
二、事件和信号量的区别与联系
2018年12月29日
10:47
一、区别
1.信号量是一个值,只代表一个事件。
而事件是代表好多信号量。这就是信号量只能一对一的同步,一对一就是一个线程对一个信号量。
而事件可以是一对多,多对多。
事件中的值是代表32个事件的值。
事件可以看成多对多、一对多的同步,而信号量是一对一的同步。
2.信号量是take时,值自动减减,release时自动加加。相当于其值的变化是自动控制的。
而事件是手动控制,要不要清零,不清这个事件标志位一直存在。
二、联系
当事件只用到一个事件时,也就是值只用到一位时,事件和信号量的效果相同。
事件可以看成信号量的进化,是信号量的全集。信号量可以看成是事件的子集。
在某一条件下,事件和信号量效果相同,可以认为是等价的。
三、应用场景剖析
当只需一对一同步的时候,用信号量就够了。
当一对多,或多对多时用事件。
RTT的线程同步篇——总结相关推荐
- RTT的线程同步篇——事件
野火RTT第21章事件 2018年12月29日 10:47 事件也是线程间通信,仅用于实现线程间同步,而不能传输数据.可以在中断中发送事件. 一对多:一个线程等待多个事件触发:多个事件中的任意一个发生 ...
- RTT的线程同步篇——互斥量
野火RTT第20章互斥量 2018年12月29日 10:47 互斥量不能在中断服务程序中使用. 互斥量是特殊的二值信号量,其"特殊"在哪呢?互斥量不同于二值信号量的地方在于:互斥量 ...
- RTT的线程同步篇——信号量
野火RTT 19章信号量 2018年12月29日 10:46 相当于裸机中的标志 信号量:实现线程间的通信,实现线程间的同步货临界资源的互斥访问. 多线程系统中,线程间需要同步或互斥实现临界资源保护. ...
- RTT的线程同步篇——异常管理
野火RTT第25章异常 2018年12月29日 10:47 一.中断中使用RRT的IPC通信机制. 异常分为同步异常和异步异常. 中断属于异步异常. RTT建议在中断中采用信号量.消息.事件来标记. ...
- C#多线程之线程池篇1
在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...
- 秒杀多线程第六篇 经典线程同步 事件Event
阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...
- 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
前面<秒杀多线程第四篇一个经典的多线程同步问题>提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了 ...
- 秒杀多线程第七篇 经典线程同步 互斥量Mutex
阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...
最新文章
- Centos7 安装lnmp
- RocketMQ部署安装(非Docker安装)
- 汇编原理实验 --查找子字符串的位置
- 为record类型自定义Equals方法
- excel趋势线公式导出_如何用Excel进行预测分析?
- 三角形最佳路径问题(信息学奥赛一本通-T1288)
- 程序以html形式发送邮件注意问题
- [Linux] 内核模块proc使用 实例:统计所有进程的信息
- html5播放器占用带宽情况,分享|用 bmon 查看网络带宽使用情况
- 我❤️—Python自动化测试,30岁熬到月薪20K+,分享我的多年面试经…
- 编码风格之变量的命名规则
- mybatis使用详解
- 如何写好一篇博客(文章)
- 云服务器安全组设置后,依然无法访问端口(已解决)
- kiv8测量方法_measure_测量 | measure_Scikit image_参考手册_非常教程
- java sql语句之插入语句的拼接规则
- SPH算法简介(一): 数学基础
- 屏蔽无法验证发行者,你确实要运行此软件吗?的提示
- C什么k什么_币圈韭菜必读——什么是K线
- 比Postman还好用的API神器Eolink,效率担当
热门文章
- 2.[精通Hibernate笔记]整合Spring
- python3下的IE自动化模块PAMIE
- flash位图技术研究篇(8):扫描像素点
- [转] 应聘Java笔试时可能出现问题及其答案(第五部分)
- XML和JSON的比较
- 首款搭载鸿蒙OS的智能手机,首款搭载鸿蒙OS 华为智选智能摄像头Pro零点全网开售:299元...
- Java 编解码问题
- ansible 模块_您需要了解的Ansible模块
- 试驾小程序_Linux如何成为Linux:试驾1993-2003发行版
- 3W | 跟着小小学会这些 Java 工程师面试题,月薪至少 3 W