计数信号量
- 计数信号量可以看做深度大于1的队列,任务只关心队列是空还是非空
事件计数
- 每次事件发生时,中断服务例程都会“给出”(Give)信号量——信号量在每次被给出时其计数值加1。延迟处理任务每处理一个任务都会“获取”(Take)一次信号量——信号量在每次被获取时其计数值减1。信号量的计数值其实就是已发生事件的数目与已处理事件的数目之间的差值
- 用于事件计数的计数信号量,在被创建时其计数值被初始化为0
资源管理
- 信号量的计数值用于表示可用资源的数目。一个任务要获取资源的控制权,其必须先获得信号量——使信号量的计数值减1。当计数值减至0,则表示没有可用资源。当任务利用资源完成工作后,将给出(归还)信号量——使信号量的计数值加1
- 用于资源管理的信号量,在创建时其计数值被初始化为可用资源总数