在多道程序环境下,进程同步问题十分重要,也是相当有趣的问题,因而吸引了不少学者对它进行研究,由此而产生了一系列经典的进程同步问题,其中较有代表性的是“生产者—消费者”问题、“读者—写者问题”、“哲学家进餐问题”等等。
生产者-消费者问题
1. 利用记录型信号量解决生产者-消费者问题
假定在生产者和消费者之间的公用缓冲池中具有n个缓冲区,这时可利用互斥信号量mutex实现诸进程对缓冲池的互斥使用;利用信号量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量。又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲池未空,消费者便可从缓冲池中取走一个消息。
具体的算法描述如下:
Var mutex, empty, full: semaphore:= l , n, 0;
buffer:array[O,... ,n- l] of item; nextp,nextc:item;
in, out: 0,1,…,n-1:=0, 0; ;
begin parbegin producer: begin
repeat
produce an item in nextp;
wait(empty);
wait(