基于信号量机制的生产者消费者问题的分析

时间:2022-09-28 06:05:18

基于信号量机制的生产者消费者问题的分析

摘 要:本文研究的是操作系统中进程同步和互斥的三大经典问题之一的生产者和消费者问题,通过信号量的机制,对多种办法解决该问题中可能会出现的多种情况。

关键词:缓冲区;信号量;Java

1 信号量机制

生产者――消费者问题(Procedure――Consumer)是相互合作的进程关系的一种抽象,既包含了同步又包含了互斥。同步指的是进程之间的一种协调行为,互斥,指的是对于临界区的使用在某个时刻只允许仅被一个进程使用。

为了解决进程的同步和互斥,荷兰学着Dijkstra于1965年提出了一种卓有成效的信号量机制[1]。在长期的应用中,信号量机制经历了三个阶段的发展,⒈整型信号量⒉记录型信号量⒊“信号量集”机制。

1.1 整型信号量

定义一个整型变量S,表示资源的数目,仅能通过P(Wait(S),申请资源),V(Signal(S),释放资源)操作来访问。具体定义如下:

P(S):①将信号量S的值减1,即S=S-1;

②如果S

V(S):①将信号量S的值加1,即S=S+1;

②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。

1.2 记录型信号量

整型信号量存在一个缺点,当S

typedef semaphore=record

count:=integer;

queue:list of queue;

end

其中,count为信号量的个数。queue为阻塞队列的进程数目。

1.3 AND信号量

如果出现多个临界资源时,就需要用AND信号量,指的是一个进程一次性地申请运行所需要的所有的资源,使用完后一次性地释放资源。在这里需要设置两个互斥的信号量实现对两个资源的互斥使用,Dmutex,Emutex。

即:Swait(S1,S2,S3,……Sn),Ssignal(S1,S2,S3,……Sn)。

1.4 信号量集

在该种信号量机制中,是在AND信号量机制的基础上,增加了一个下限,当资源数量低于某一下限时即不予以分配资源。

Swait(S1,t1,d1,……S2,tn,dn)

Ssignal(S1,d1,……,Sn,dn)

其中,S为信号量,d为需求值,t为下限值。

2 Procedure――Consumer

生产者――消费者问题涉及到生产者进程和消费者进程。可以把该过程理解为生产者生产产品,消费者消费这些产品。在两者之间设置了存放产品的缓冲池。生产者把产品放入一个缓冲区,消费者从一个缓冲区取走产品去消费。这个问题中,需要注意:⒈生产者和消费者必须是互斥的,即当生产者往缓冲区投放产品时,消费者不能去取,其他生产者也不能往里面放数据。⒉生产者和消费者是同步的,即生产者不能向满缓冲区投放产品,消费者也不能在空缓冲区取数据。Procedure流程图如下:

2.1 一个生产者一个消费者,公用一个缓冲区

这个问题中不存在互斥的问题,因此只需定义两个同步信号量,empty与full。Empty表示缓冲区是否为空,初值为1,full表示缓冲区是否为满,初值为0。

2.2 一个生产者,一个消费者,公用n个环形缓冲区

这种情况下,生产者可以把产品放入其中一个缓冲区当中,只用当缓冲区放入产品,消费者才可以去消费,但是,这些缓冲区是可以循环使用,为了实现循环使用,我们采用了指针,要求生产者是按照一定的顺序把生产的产品放入到缓冲区链中。

定义两个同步信号量empty和full,Empty表示缓冲区是否为空,初值为n,full表示的是缓冲区是否为满,初值为0。定义两个指针生产者和消费者使用的指针,为input和iget,指向下一个能够使用的缓冲区。

2.3 n个生产者,n个消费者,公用n个环形缓冲

生产者和消费者之间的是同步的,各个生产者之间,各个消费者之间是互斥的,对缓冲区的访问应该是互斥的,为了解决这个问题,需要利记录型信号量。定义三个变量,S为互斥信号量,初始化为1,n为资源信号量,表示已经存放产品的的缓冲区,初始化为0,e为资源信号量,表示空缓冲区的个数。

3 总结

⑴进程在申请资源的时候,如果资源信号量和互斥信号量同时存在,应该先申请资源信号量,后申请互斥信号量(表示查看下该缓冲区是否其他进程在使用)。

⑵同一进程中的P、V操作必须配对出现,同一个信号量的P、V操作可以不同时出现,但是可以在同一进程中嵌套使用。

⑶申请资源必须在释放资源之前,即先需要Wait,再Signal。

[参考文献]

[1]严兵.生产者消费者问题的分析和实现[J].西华大学学报(自然科学版),2006,25(2):13-15.

[2]汤晓丹,梁红兵,哲凤屏,汤子瀛.计算机操作系统[M].西安电子科技大学出版社,2007.

[3]彭学军,霸桂芳.生产者――消费者问题图示分析两则.许昌师专学报[J],2006-3-30.

[4]李金忠,曾劲涛.生产者/消费者经典同步问题的深入探究.电脑编程技巧与维护[J].2008-01-03.

[5]张秀娟.生产者-消费者系统的建模与行为分析方法研究.微电子学与计算机,2004-06-20.

基金项目:2013年福建省教育厅科技研究项目(JB13280)。

作者简介:李盼盼(1984-),女,硕士,助教;赵浩(1982-),男,硕士,助教。

上一篇:重症感染患者重症监护室患者住院治疗时间的影... 下一篇:高尿酸血症与冠心病的相关性临床观察