RT-thread学习笔记——使用信号量的实例分析

内核部分

信号量

在官方视频中的“生产消费者问题”示例中,生产者生产一个数据,满位信号量数值会加1,之后消费者便可以获取满位,访问数据。与此相同,消费者获取一个信号量,空位信号量数值加1,之后生产者就可以获取空位,生产数据。
在这里插入图片描述

这个逻辑很容易理解,但我有个疑问,为什么生产者每次都要释放一个满位呢?消费者在获取到一个满位,访问完数据之后,不是就会把那个满位给空出来,不应该一个满位信号量值就够了。这样一来释放满位的操作显得很不合理。

  
可是程序运行完全没问题,只能说明是我的想法出错了。

  
之后,我在官方文档中心找到了答案。原来当消费者线程获取一个满位,在访问完数据之后,满位信号量值便会减一,而不是空出来。这样子逻辑就可以解释通了,必须由生产者线程增加一个满位值。


另外我还发现一个小知识:

由于,生产者线程延时时间比消费者要短,所以生产者生产速度肯定比消费者获取速度要快。这在代码中也可以体现出来。

在这里插入图片描述
    
  

但是在生产者生产到第8组数据时,生产者的速度似乎慢了下来,生产者生产一个数据,消费者立即就能获取到。
  
在这里插入图片描述
  
  
其实并不是生产者生产慢了,而是生产者获取不到空位信号量了。空位信号量的上限是五个,生产者快于消费者的速度已经把5个信号量都消费掉了,之后就只能等消费者释放一个,生产者才能继续获取到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值