RT-Thread学习记录8 生产者消费者问题

本文记录了RT-Thread操作系统中经典的生产者消费者问题,详细阐述了问题模型,核心要点以及如何利用二值信号量解决线程间的互斥与同步问题。并给出了实例代码。
摘要由CSDN通过智能技术生成

以下为看视频笔记..........

1.生产者消费者问题模型

生产者消费者问题是一个经典的、多线程同步问题。

有两个线程: 一个生产者线程和一个消费者线程。两个线程共享一个初始为空、固定大小为n的缓存区。.

生产者的工作是“生产”一段数据,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待,如此反复;

同时,只有缓冲区非空时,消费者才能从中取出数据,一次消费一段数据, 否则必须等待,如此反复。

问题的核心是:

1.1 要保证不让生产者在缓存还是满的时候仍然要向内写数据;

1.2 不让消费者试图从空的缓存中取出数据。

2. 生产者消费者问题本质

 

解决生产者消费者问题实际上是要解决线程间互斥关系问题(指的是共享资源)同步关系问题(线程的步调)

由于缓冲区是临界资源,它一个时刻只允许一个生产者放入消息,或者--个消费者从中取出消息,所以这里我们需要解决一个互斥访问的问题。

同时生产者和消费者又是一- 个相互协作的关系,只有生产者生产之后,消费者才能消费,所以我们还需要解决一个同步的问题。

二值信号量指的是value值为0或1,实现共享资源的互斥。首先把value值初始化为1, 生产者线程访问共享资源时,他先获取二值信号量的值,因为value初始化为1,生产者可以操作共享资源;当这时候消费者线程去获取共享资源时,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值