,A向Q 写入信息, B从Q 读出信息,算法框图如图 3-24 所示。②设A,B 为两个并发进程,它们共享一个临界资源。其运行临界区的算法框图如图 3-25 所示。图 3-24 进程 A,B 的算法框图图 3-25 两个并发进程临界区的算法框图这个算法不对。因为 A、B 两个进程共用一个缓冲区 Q, 如果 A 先运行, 且信息数量足够多, 那么缓冲区 Q 中的信息就会发生后面的冲掉前面的,造成信息丢失, B 就不能从 Q 中读出完整的信息。改正: A、B 两进程要同步使用缓冲区 Q 。为此,设立两个信号量: empty 表示缓冲区 Q 为空,初值为 1; full 表示缓冲区 Q 为满,初值为 0。算法框图如图 1 所示。这个算法不对。因为 A、B 两个进程是并发的,它们共享一个临界资源,所以二者应互斥地使用该临界资源,在进入临界区时不存在先 A后B 的时序关系,而是哪个进程先到一步就先进入自己的临界区。改正: A、B 两个进程应互斥地进入临界区。为此,设立一个信号量:互斥信号量 mutex ,其初值为 1。算法框图如图 2 所示。 A 进程 B 进程 A 进程 B 进程 P(empty) P(full) P(mutex) P(mutex) 向Q 写入信息从Q 中读出信息临界区代码 CSa 临界区代码 CSb V(full) V(empty) V(mutex) V(mutex) 图1图2 5. 系统中只有一台打印机,有三个用户的程序在执行过程中都要使用打印机输出计算结果。设每个用户程序对应一个进程。问:这三个进程间有什么样的制约关系?试用 P、V 操作写出这些进程使用打印机的算法。答: 因为打印机是一种临界资源,所以这三个进程只能互斥使用这台打印机,即一个用户的计算结果打印完之后,另一个用户再打印。设三个进程分别为 A、B和C。设一个互斥信号量 mutex ,其初值为 1。