1.一个生产者,一个消费者,一个缓冲池
emptySemaphore(空信号量),fullSemaphore(满信号量)
buffer[](缓冲区);
produce(){
wait(emptySemaphore);
buffer 数量增加
signal(fullSemaphore);
}
customer(){
wait(fullSemaphore);
buffer 数量减少
signal(emptySemaphore);
}
2.一个生产者,一个消费者,环形缓冲区
emptySemaphore(空信号量),fullSemaphore(满信号量);
1-n buffer[](环形缓冲区),
in(向缓冲区放入产品指针) out(向缓冲区中拿走产品指针)
produce(){
wait(emptySemahore)
buffer(in) 增加 //in指向的缓冲区产品增加
in = (in+1) mod n;//循环利用缓冲区,所以采用取模的方式
signal(fullSemaphore);
}
cusotmer(){
wait(fullSemaphore);
buffer(out);//out 指向缓冲区产品减少
out = (out+1) mode n;
signal(emptySemaphore);
}
3.多个生产者,多个消费者,环形缓冲区
生产者与消费者存在同步关系,各个生产者之间,各个消费者之间存在互斥关系,他们必须互斥的访问缓冲区
emptySemaphore(空信号量),fullSemaphore(满信号量);
1-n buffer[](环形缓冲区),
in(向缓冲区放入产品指针) out(向缓冲区中拿走产品指针)
produceMutex(生产者互斥信号量),customerMutex(消费者互斥信号量)
produce(){
wait(emptySemaphore);
wait(produceMutex);
buffer(in);
in = (in+1) mode n;
signal(produceMutex);
signal(fullSemaphore);
}
customer(){wait(fullSemaphore);
wait(customerMutex);
buffer(out);
out = (out+1) mode n;
signal(customerMutex);
signal(emptySemaphore);
}