ucos 信号量的理解3
来源:互联网 发布:货到付款的淘宝网 编辑:程序博客网 时间:2024/04/29 18:52
简单地说:
当信号量=0时,表示信号量代表的资源不可用,操作系统调用OSSemPend函数的任务加入该信号量的等待任务列表中,
当信号量>0时,表示信号量代表的资源可用,OSSemPend函数返回,任务可用使用资源,一般地,信号量的最大值表示资源的最大同时共享数,
nmax=1;表示资源最多只能由i该任务使用,为了保证该单元不被其它任务修改,就使用nmax=1的信号量,nmax>1表示资源可由多个任务使用,如FIFO,一个
任务写单元,一个任务可以写其它单元,则可使用nmax>1信号量,信号量的大小用来表示FIFO的可用单元数
减1操作:当该信号量=0时表示FIFO已满,任务只能等待,当该信号量>0是表示FIFO有空,可以使用,同时要减1表示调用FIFO以满,任务只能等待;当该信号量>0
时表示FIFO有空,可以使用,同时要减1表示调用OSSemPend函数的任务已经使用一个资源FIFO单元,可以使用资源少了一个
加1操作:当某个任务调用OSSemPost从FIFO中取出一个值时,该FIFO单元就空出一个可写单元,也就是资源多了一个,为表示这个变化,信号量要加1,一旦信号量由0->1;
则把资源给等待任务列表中优先级最高的任务(通过OSSemPend函数的返回);
总之,信号量的值代表共享资源的剩余量,用掉一个减1,空出一个加1;
举个例子:
顾客到银行办事,银行现有n名业务员
1.办事前要取号(OSSemPend()),一般有前面有xx位顾客,表示正在等待服务的顾客数
2.另外假设银行有一指示牌指示当前空闲的业务员的数量为n
3.当m>0表示有空闲的业务员,那么顾客可以立即去办理业务立即返回,这样空闲的业务就少一个,指示牌的数量(信号量的值)就要减1,但n只能减到0.
4.当n=0时,表示没有空闲的业务员,那么顾客只能等待OSSemPend不返回,切换到其它任务。
5.当某位业务员为顾客办完手续后,他就空闲下来,这样空闲的业务员就多一个,指示牌指示的数量就要加1,但n只能加到N
这时银行就会去查找有没有正在等待的顾客,如果有,就找出其中优先级最高的顾客,让他来办理业务
6.顾客在取号时设置了等待时间,那么在等待时间过后,银行就会通知顾客时间到(OSSemPend返回),顾客接着去办其他事。
7. 也有顾客希望,在取号时,如果有空闲的业务员他就办事,没有的话就走,那么就要用特殊取号方式(OSSemAccept());
8.N=1时,表示只有一个业务员,指示牌只能指示0或1两个值,这就是二值信号量。
- ucos 信号量的理解3
- ucos ii信号量的理解
- ucos信号量的理解2
- ucos信号量理解
- ucos信号量理解1
- UCOS-II信号量删除的函数使用和理解
- uCos-ii中对于信号量、互斥信号量、事件标志组的理解
- UCOS-II:对于信号量,互斥信号量,事件标志组的个人理解
- UCOS-II:对于信号量,互斥信号量,事件标志组的个人理解
- UCOS-II:对于信号量,互斥信号量,事件标志组的个人理解-转
- ucos-ii 信号量的使用
- ucos---信号量
- ucos 信号量
- ucos任务与信号量的例子
- ucos中关于信号量的使用总结
- uCOS里的信号量错误笔记
- uCOS II中信号量的使用
- ucos-ii示例3:互斥型信号量测试
- 编译Android2.2源码(1)
- 正则特殊字符
- 关于在eclipse开发web时鼠标移动到图片上显示文字问题
- DensityUtil
- js 原始类型 内置对象 protype instanceof construcor Object.prototype.toString.call()
- ucos 信号量的理解3
- 使用JSON和Jersey的Java RESTful Web服务
- PHP的发展历史
- C++字符分割
- 浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
- [iOS]Swift-Alamofire 4.0 使用初探
- Netty实现原理浅析
- 服务器中命令行操作mysql数据库
- OneStep 移植