一、问题描述
1.有两个进程,生产者进程和消费者进程
2.临界资源:缓冲池
3.关系:只要缓冲池不满,生产者进程就可以向缓冲池中存入信息;只要缓冲池不空,消费者就可以从缓冲池中拿走信息。缓冲池同时只能被一共进程占用。
二、互斥问题
1.缓冲池中的缓冲区有N个。
2.信号量设置:
(1)互斥信号量mutex,这个信号量用于标注缓冲池是否被占用
互斥信号量的设置,要看有哪几种互斥就设置几个。比如若是允许生产者写的时候,消费者读,互斥的关系就是:生产者和生产者互斥写入缓存区;消费者和消费者互斥读缓冲区;生产者和消费者之间就没有互斥关系了,故一共有两种互斥关系,设置两个互斥信号量。
(2)信号量full:表示满缓冲区的个数
(3)信号量empty:表示空缓冲区的个数
三、算法描述(PASCAL)
1.标准生产者-消费者问题描述:
VAR
mutex,empty.full:semaphore :=1,n,0;
in,out: integer := 0, 0 ;
Buffer: array [0..n-1] of item ;
Parbegin
Producer:
begin
repeat
produce an item in nextp ;
wait(empty);