信号量简介
信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问,也就是通过信号量可以判断是否有资源。
可以用以下示意图展示,
- 当计数值大于0时,也就代表信号量有资源
- 当释放信号量时,信号量计数值,也就是资源数加一
- 当获取信号量时,信号量计数值,也就是资源数减一
- 信号量计数值有限制,当最大值限定为1时就是二值信号量,最大值不是1,就是计数型信号量
总结:信号量就是用来传递状态的,也就是是否有资源的。
信号量其实是基于队列实现的,信号量和队列的对比如下,
二值信号量
二值信号量实际上就是一个队列长度为 1 的队列,在这种情况下,队列就只有空和满两种情况。
二值信号量通常用于互斥访问或任务同步, 与互斥信号量比较类似,但是二值信号量有可能会导
致优先级翻转(后续解释)的问题,所以更适合任务同步。
二值信号量使用示意图,
如上图所示,Give操作就相当于把该标志置满,而Take操作