我直观的理解,就像是一个流水线,一边是生产者,负责放入货物;一边是消费者,负责取走货物。那么“流水线”对应coding层面的一个缓冲区,那么是不是一个缓冲区就够了?但是,一般操作系统的课本和习题上面,描述的生产者/消费者算法,总是用两个缓冲(一个满缓冲区,一个空缓冲区)来做这件事情,像下面这样:
Semaphore full=0;//满缓冲区数目
Semaphore empty=n;//空缓冲区数目
Semaphore mutext=1;//对有界缓冲区进行操作的互斥信号量
Producer(){
while(true){
Produce an item
P(empty);//申请一个空缓冲区
P(mutex);//申请使用缓冲池
将产品放入缓冲区
V(mutex);//释放信号量
V(full);//增加一个满缓冲区
}
}
Consumer(){
while(true){
P(full);//申请一个满缓冲区
P(mutex);//申请使用缓冲池
取出产品
V(mutex);
V(empty);//增加一个空缓冲区
Consume the item
}
}我的想法是,能否把full和empty这两个缓冲区合并成一个pipeline来表示?这样做会有什么不好的后果吗?
谢谢