基于posix信号量的生产者于消费者模型
(此处只有一个生产者与一个消费者)
使用一个循环队列作为生产者于消费者之间的交易场所,生产者向其中放数据,消费者从中拿取数据。为了达到同步使用posix信号量。
posix 信号量
信号量就相当于一个计数器,记录共享资源的份数。每当有一个线程申请访问该共享资源,就将信号量的数目–,当信号量的数目为零时,表示所有的公共资源都正在被访问。其他想要继续申请信号量线程便进行等待当信号量数目不为0时,其他线程可继续申请。每当一个线程访问完信号量时,便将信号量的数目++,其他线程便可继续申请。通过posix信号量,当所有资源被被使用时,便不可再使用,直到有可用资源出现,实现了同步。
一个定长的数组,作为循环队列的基础
生产者与消费者两者之间存在互斥与同步的关系。即两者不能访问同一块资源,同时要在生产者放完数据后,消费者才能从该块区域中拿取数据。
通过设置信号量的初始值,使生产者与消费者不可能同时存取同一块数据块中的数据,只能是生产者先放好数据,消费者才能从中取出数据。使得消费者只能跟在生产者后面,虽然两者可以同时访问同一队列,但无法同时访问同一个下标的数据块。生产者将所有的空格放满数据后,只有消费者取走后才能继续放,所以生产者的的速度不能超过消费者一圈,两者之间的距离间隔只能是一圈。
- 消费者要跟在生产者的后面,消费者不能超过生产者
- 生产者的速度不能超过消费者一圈,在放完一圈后只能等带消费者拿取数据
- 开始时生产者与消费者同时指向0下标处
- 当将空格放满时,