UCOSII 信号量和互斥信号量(保姆级别讲解)----看完不后悔系列!!!
UCOSII 任务的同步与通信状态(保姆级别讲解)----看完不后悔系列!!!
添加链接描述
在前一篇文章基础背景下,我们为了解决对共享资源访问出现线程冲突的问题,引入了几个概念,分别是计数型信号量和互斥型信号量。接下来我会根据自己的理解为大家一一进行讲解。
首先,什么叫做信号量?
还记不记得在上一篇文章中贴了一张关于系统中任务同步与通信的模型图,这里再贴一次。
如图所示,其中信号量、消息队列都可以统称为事件。本篇文章只讨论信号量。使用信号量的最初目的,是为了给共享资源设立一个标志。我们可以将其想象成我们经常使用的标志位。只不过该标志位代表的是共享资源被占用的情况罢了。这其实也是计数型信号量和互斥型信号量的区别所在。为了让大家能够清楚的理解其含义,还是以一个实例来进行说明。
实例:
如果一个电话亭只允许一个人进去打电话,那么电话亭的门上就应该有一个可以变换两种颜色的标志,类似于我们在日常生活中见到的公共厕所,如果里面有人门上的标志会显示红色,如果没人门上的标志会显示绿色。这样打电话的人就可以根据牌子的颜色来了解电话亭的被占用情况。其实这里的电话亭就是我们刚才所说的共享资源。例如,如果一个人去电话亭打电话时见到牌子上的颜色是绿色,那么他就可以进去打电话,如果是红色,那么他只好等待。如果又陆续来了很多人,那么就需要排队等待直到门上的标志变为绿色下一个等待的人才可以进去打电话。
在上述实例中,由于同一时刻只能有一个线程可以对共享资源进行访问,所以被叫做“互斥型信号量”。大家可以好好理解理解“互斥”这两个字的含义,说的再通俗点,有我没他,有他没我~~~,哈哈。
其实互斥型信号量相当于长度为1的队列,至于什么是队列,会在之后的文章中进行讲解。
再举个实例,如果电话亭可以允许多人打电话,那么电话亭门前就不应该是那种只有红色和绿色两种颜色状态的牌子,而应该是计数器,初始值一般是0,该计数器在每进去一个人是会自动加1,而每出去一个人时自动减1。这种信号量叫做计数型信号量。
计数型信号量模型图:
互斥型信号量模型图:
UCOSII 信号量和互斥信号量(保姆级别讲解)----看完不后悔系列!!!相关推荐
- uCOSii中的互斥信号量
uCOSii中的互斥信号量 一.互斥型信号量项管理 (MUTUAL EXCLUSION SEMAPHORE MANAGEMENT) OSMutexAccept() 无条件等待地获取互斥型信号量 OSM ...
- ucosIII 共享资源(信号量、互斥信号量)
共享资源: 变量(静态或全局变量).数据结构体.RAM表格.I/O设备等.OS在使用一些资源时候,例如IO设备打印机,当任务1在使用打印机时候必须保证资源独享,避免其他任务修改打印内容导致出错,因此需 ...
- UCOS操作系统——信号量与互斥信号量(九)
UCOS操作系统 文章目录 UCOS操作系统 一.信号量简介 1.二进制信号量 2.计数型信号量 二.使用信号量 1.相关API函数 2.OSSemCreate()创建信号量 3.OSSemPend( ...
- 别看是面试问烂的题目,一面试你照样还是不会系列MySQL四种隔离级别,看完吊打面试官!
别看是面试问烂的题目,一面试你照样还是不会系列MySQL四种隔离级别,看完吊打面试官! 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也 ...
- 京东青龙上车教程保姆级别讲解为什么上车以及详细开活动教程
11月30日青龙面板2.10.10版本保姆级讲解附加青龙面板安装jd代挂整合教程 整合 来源博主:Pilipili_Cheers 首先讲讲代挂 我们就是通过青龙面板去进行脚本配置,以达到自动运行脚本, ...
- JAVA MemCache 史无前例的详细讲解 看完包精通MEMCACHE
JAVA MemCache 史无前例的详细讲解!看完包精通MEMCACHE! 分类: 高并发_性能2012-08-22 09:15 5051人阅读 评论(0) 收藏 举报 javastringobje ...
- STM32工作笔记0086---UCOSIII信号量和互斥信号量(下)
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 来看一个使用信号量,进行任务同步的案例
- STM32工作笔记0085---UCOSIII信号量和互斥信号量(上)
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152
- 面试问烂的 MySQL 四种隔离级别,看完吊打面试官!
作者:游泳的石头 https://www.jianshu.com/p/8d735db9c2c0 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被 ...
最新文章
- 盘点2019年336起机器人及相关领域投融资事件!注重细分领域深耕行业复苏趋势显现...
- HDU 1847 Good Luck in CET-4 Everybody!(组合博弈)
- pywin32的安装
- 喜马拉雅音频下载工具
- 一张小票看透支付清结算架构
- JAVA JDBC详解
- 可视化mysql怎么导入sql文件_使用navicat导入sql文件的方法步骤
- c语言语法分析源程序,深入浅出编译原理-5-一个简单语法分析器的C语言实现
- MongoDB 4.2 内核解析 - Change Stream
- 在Linux中模拟击键和鼠标移动
- 宁德时代上半年实现营业收入440.75亿元,净利润44.84亿元
- 【干货】从0到1打造企业数字化运营闭环白皮书.pdf(附下载链接)
- RocketMQ 消息队列单机部署及使用
- 并查集之Wireless Network(一)
- 提供通达信level2逐笔还原逐笔成交ticks导出提取工具
- 跨境电商erp管理系统
- js实现展开全部内容,收起全部内容
- 禁用驱动数字签名验证
- 梦想CAD软件(控件)图层介绍
- 亚马逊中国发布2018图书排行榜