1 生产者-消费者问题
生产者-消费者(producer-consumer)问题也就是有界缓冲区(bounded-buffer)问题,即生产者不断的往有界缓冲区中放产品,消费者不断从中取产品,在保证两者互斥的基础上,当缓冲区满时生产者要阻塞,等待消费者取产品后将其唤醒,当缓冲区空时消费者要阻塞,等待生产者放产品后将其唤醒。用Java信号量描述的算法如下:
//互斥信号量
Semaphoremutex =new Semaphore(1);
//空缓冲区数量
Semaphoreempty = new Semaphore(BUFFER_SIZE);
//满缓冲区数量
Semaphorefull = new Semaphore(0);
// producer calls this method
public void insert(Object item) {
empty.acquire();
mutex.acquire();
//add an item to the buffer
buffer[in] = item;
in= (in + 1) % BUFFER_SIZE;
mutex.release();
full.release(); }
// consumer calls this method
public Object remove() {