生产者与消费者模型--基于posix信号量的

基于posix信号量的生产者于消费者模型

(此处只有一个生产者与一个消费者)
使用一个循环队列作为生产者于消费者之间的交易场所,生产者向其中放数据,消费者从中拿取数据。为了达到同步使用posix信号量。

posix 信号量

信号量就相当于一个计数器,记录共享资源的份数。每当有一个线程申请访问该共享资源,就将信号量的数目–,当信号量的数目为零时,表示所有的公共资源都正在被访问。其他想要继续申请信号量线程便进行等待当信号量数目不为0时,其他线程可继续申请。每当一个线程访问完信号量时,便将信号量的数目++,其他线程便可继续申请。通过posix信号量,当所有资源被被使用时,便不可再使用,直到有可用资源出现,实现了同步。

一个定长的数组,作为循环队列的基础

生产者与消费者两者之间存在互斥与同步的关系。即两者不能访问同一块资源,同时要在生产者放完数据后,消费者才能从该块区域中拿取数据。

通过设置信号量的初始值,使生产者与消费者不可能同时存取同一块数据块中的数据,只能是生产者先放好数据,消费者才能从中取出数据。使得消费者只能跟在生产者后面,虽然两者可以同时访问同一队列,但无法同时访问同一个下标的数据块。生产者将所有的空格放满数据后,只有消费者取走后才能继续放,所以生产者的的速度不能超过消费者一圈,两者之间的距离间隔只能是一圈。

  • 消费者要跟在生产者的后面,消费者不能超过生产者
  • 生产者的速度不能超过消费者一圈,在放完一圈后只能等带消费者拿取数据
  • 开始时生产者与消费者同时指向0下标处
  • 当将空格放满时,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值