正在加载图片...
原语来改变。 P、V操作的定义如下: P(s):s=s-1 若S>=0,则进程继续运行。 若S<0,则该进程被阻塞,并将它插入该信号量的等待队列中。 操作:S=S+1 若s>0,则进程继续执行。 若S<=0,则从信号量等待队列中移出第一个进程,使其变为就绪状态,然后再返回原 进程继续执行 3.信号量的应用 利用信号量可以解决进程间的同步和互斥问题,实现进程间的互斥和同步模型如下 1)互斥模型 进程Pl 进程P2 P(S) 其中,信号量的初值:S=1;CS1,CS2分别是进程P1和P2的临界区 (2)同步模型 进程P1 进程P2 LI: P(S 其中,信号量的初值:S=0。 (3)用P、V操作描述前趋关系 若干进程为了完成一个共同任务而并发执行。然而,这些并发进程之间根据逻辑上的需 要,有的操作可以没有时间上的先后次序,即不论谁先做,最后的计算结果都是正确的。但有的 操作有一定的先后次序,也就是说它们必须遵循一定的同步规则,只有这样,并发执行的最后 结果才是正确的。我们可以用本章前面介绍的前趋图来描述进程在执行次序上的先后关系 (4)生产者·消费者问题 生产者-消费者问题是最著名的进程同步问题。它描述了一组生产者向一组消费者提供产 品,它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取得产品。生产者消费者问 题是许多相互合作进程的一种抽象。例如,在输入时,输入进程是生产者,计算进程是消费者 在输出时,计算进程是生产者,打印进程是消费者。因此,该问题具有很大实用价值。 我们把一个长度为n的有界缓冲区(n)0)与一群生产者进程P1、P2、…、P和一群消费 者进程CI、C2、…、CK联系起来。假定这些生产者和消费者是互相等效的。只要缓冲区未满, 生产者就可以把产品送入缓冲区,类似地,只要缓冲区未空,消费者便可以从缓冲区中取走物 品并消耗它。生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者 从空的缓冲区中提取物品 为解决这一类生产者-消费者问题,应该设置两个同步信号量,一个说明空缓冲单元的数 用 empty表示,其初值为有界缓冲区的大小n,另一个说明满缓冲单元的数目,用fu11表示, 其初值为0。在本例中有P1、P2、…、Pm个生产者和C1、C2、…、CK个消费者,它们在执行 生产活动和消费活动中要对有界缓冲区进行操作。由于有界缓冲区是一个临界资源,必须互斥 使用,所以,另外还需设置一个互斥信号量 mutex,其初值为1。生产者.消费者问题的同步描述 如下 int full /*申满缓冲单元的数目* int empty=n /*空缓冲单元的数目*/原语来改变。 P、V 操作的定义如下: P(s): s=s-1 若 S>=0,则进程继续运行。 若 S<0,则该进程被阻塞,并将它插入该信号量的等待队列中。 V 操作:S =S+1 若 s >0,则进程继续执行。 若 S<=0,则从信号量等待队列中移出第一个进程,使其变为就绪状态,然后再返回原 进程继续执行。 3.信号量的应用 利用信号量可以解决进程间的同步和互斥问题,实现进程间的互斥和同步模型如下: (1)互斥模型 进程 P1 进程 P2 P(S) P(S) CS1 CS2 V(s) v(s) 其中,信号量的初值:S=1;CS1,CS2 分别是进程 P1 和 P2 的临界区。 (2)同步模型 进程 P1 进程 P2 L1:P(S) L2: V(S) 其中,信号量的初值:S=0。 (3)用 P、V 操作描述前趋关系 若干进程为了完成一个共同任务而并发执行。然而,这些并发进程之间根据逻辑上的需 要,有的操作可以没有时间上的先后次序,即不论谁先做,最后的计算结果都是正确的。但有的 操作有一定的先后次序,也就是说它们必须遵循一定的同步规则,只有这样,并发执行的最后 结果才是正确的。我们可以用本章前面介绍的前趋图来描述进程在执行次序上的先后关系。 (4)生产者·消费者问题 生产者-消费者问题是最著名的进程同步问题。它描述了一组生产者向一组消费者提供产 品,它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取得产品。生产者消费者问 题是许多相互合作进程的一种抽象。例如,在输入时,输入进程是生产者,计算进程是消费者; 在输出时,计算进程是生产者,打印进程是消费者。因此,该问题具有很大实用价值。 我们把一个长度为 n 的有界缓冲区(n〉O)与一群生产者进程 P1、P2、…、Pm 和一群消费 者进程 CI、C2、…、CK 联系起来。假定这些生产者和消费者是互相等效的。只要缓冲区未满, 生产者就可以把产品送入缓冲区,类似地,只要缓冲区未空,消费者便可以从缓冲区中取走物 品并消耗它。生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者 从空的缓冲区中提取物品。 为解决这一类生产者-消费者问题,应该设置两个同步信号量,一个说明空缓冲单元的数 目,用 empty 表示,其初值为有界缓冲区的大小 n,另一个说明满缓冲单元的数目,用 full 表示, 其初值为 0。在本例中有 P1、P2、…、Pm 个生产者和 C1、C2、…、CK 个消费者,它们在执行 生产活动和消费活动中要对有界缓冲区进行操作。由于有界缓冲区是一个临界资源,必须互斥 使用,所以,另外还需设置一个互斥信号量 mutex,其初值为 1。生产者.消费者问题的同步描述 如下: int full=0; /*申满缓冲单元的数目*/ int empty=n; /*空缓冲单元的数目*/
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有