//生产者消费者问题
void producer(){
do{
producer an item nextp;
....
//wait-1;signal+1
wait(empty);//等待盘子为空
wait(mutex);//mutex的作用是保护接下来的操作是互斥的
buffer[in]=nextp;
in=(in+1)%n;
signal(mutex);
signal(full);//生产完后,汉堡数量加一
}while(true);
}
void consumer(){
do{
wait(full);
wait(mutex);
nextc =buffer[out];
out =(out+1)%n;
signal(mutex);
signal(empty);
consumer the item in nextc;
....
}while(true);
}
//读者写者问题
semaphore rmutex=1, wmutex=1;
int readcount=0;
void reader(){
do{
wait(rmutex);
if(readcount == 0)wait(wmutex);
readcount++;
signal(rmutex);
...
perform read operation;
...
wait(rmutex);
readcount--;
if(readcount == 0)singnal(wmutex);
signal(rmutex);
}while(true);
}
void writer(){
do{
wait(wmutex);
perform write operation;
signal(wmutex);
}while(true);
还有一个前驱图:
解题方法:
1、箭头指进wait();
2、箭头指出signal();