2.3.8 本节习题精选

2026 旧版 · 非 2027 主源 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照

## 2.3.8 本节习题精选

### 一、单项选择题

01. 下列对临界区的论述中,正确的是()。

A. 临界区是指进程中用于实现进程互斥的那段代码
B. 临界区是指进程中用于实现进程同步的那段代码
C. 临界区是指进程中用于实现进程通信的那段代码
D. 临界区是指进程中用于访问临界资源的那段代码

02. 不需要信号量就能实现的功能是()。

A. 进程同步
B. 进程互斥
C. 执行的前驱关系
D. 进程的并发执行

03. 若一个信号量的初值为 3,经过多次 PV 操作后当前值为 -1,这表示等待进入临界区的进程数是()。

A. 1
B. 2
C. 3
D. 4

04. 一个正在访问临界资源的进程由于申请等待 I/O 操作而被中断时,它()。

A. 允许其他进程进入与该进程相关的临界区
B. 不允许其他进程进入任何临界区
C. 允许其他进程抢占处理器,但不得进入该进程的临界区
D. 不允许任何进程抢占处理器

05. 两个旅行社甲和乙为旅客到某航空公司订飞机票,形成互斥资源的是()。

A. 旅行社
B. 航空公司
C. 飞机票
D. 旅行社与航空公司

06. 临界区是指并发进程访问共享变量段的()。

A. 管理信息
B. 信息存储
C. 数据
D. 代码程序

07. 以下不是同步机制应遵循的准则的是()。

A. 让权等待
B. 空闲让进
C. 忙则等待
D. 无限等待

08. 以下()不属于临界资源。

A. 打印机
B. 非共享数据
C. 共享变量
D. 共享缓冲区

09. 以下()属于临界资源。

A. 磁盘存储介质
B. 公用队列
C. 私用数据
D. 可重入的程序代码

10. 在操作系统中,要对并发进程进行同步的原因是()。

A. 进程必须在有限的时间内完成
B. 进程具有动态性
C. 并发进程是异步的
D. 进程具有结构性

11. 进程 A 和进程 B 通过共享缓冲区协作完成数据处理,进程 A 负责产生数据并放入缓冲区,进程 B 从缓冲区读数据并输出。进程 A 和进程 B 之间的制约关系是()。

A. 互斥关系
B. 同步关系
C. 互斥和同步关系
D. 无制约关系

12. 在操作系统中,P, V 操作是一种()。


<!-- page: 126 -->

A. 机器指令
B. 系统调用命令
C. 作业控制命令
D. 低级进程通信原语

13. P 操作可能导致( )。

A. 进程就绪
B. 进程结束
C. 进程阻塞
D. 新进程创建

14. 原语是( )。

A. 运行在用户态的过程
B. 操作系统的内核
C. 可中断的指令序列
D. 不可分割的指令序列

15. ( )定义了共享数据结构和各种进程在该数据结构上的全部操作。

A. 管程
B. 类程
C. 线程
D. 程序

16. 用 V 操作唤醒一个等待进程时,被唤醒进程变为( )态。

A. 运行
B. 等待
C. 就绪
D. 完成

17. 在用信号量机制实现互斥时,互斥信号量的初值为( )。

A. 0
B. 1
C. 2
D. 3

18. 用 P, V 操作实现进程同步,信号量的初值为( )。

A. -1
B. 0
C. 1
D. 由用户确定

19. 可以被多个进程在任意时刻共享的代码必须是( )。

A. 顺序代码
B. 机器语言代码
C. 不允许任何修改的代码
D. 无转移指令代码

20. 一个进程映像由程序、数据及PCB组成,其中( )必须用可重入编码编写。

A. PCB
B. 程序
C. 数据
D. 共享程序段

21. 下列关于互斥锁的说法中,正确的是( )。

A. 互斥锁只能用于多线程之间,不能用于多进程之间
B. 互斥锁只能用于多进程之间,不能用于多线程之间
C. 互斥锁可用于多线程或多进程之间,但只能由创建它的线程或进程来加锁和解锁
D. 互斥锁可用于多线程或多进程之间,但只能由对它加锁的线程或进程来解锁

22. 在使用互斥锁进行同步互斥时,下列( )情况会导致死锁。

A. 一个线程对同一个互斥锁连续加锁两次
B. 一个线程尝试对一个已加锁的互斥锁再次加锁
C. 两个线程分别对两个不同的互斥锁先后加锁,但顺序相反
D. 一个线程对一个互斥锁加锁后忘记解锁

23. 用来实现进程同步与互斥的 PV 操作实际上是由( )过程组成的。

A. 一个可被中断的
B. 一个不可被中断的
C. 两个可被中断的
D. 两个不可被中断的

24. 对于两个并发进程,设互斥信号量为 mutex(初值为 1),若 mutex = 0,则表示( )。

A. 没有进程进入临界区
B. 有一个进程进入临界区
C. 有一个进程进入临界区,另一个进程等待进入
D. 有一个进程在等待进入

25. 对于两个并发进程,设互斥信号量为 mutex(初值为 1),若 mutex = -1,则( )。

A. 表示没有进程进入临界区
B. 表示有一个进程进入临界区


<!-- page: 127 -->

C. 表示有一个进程进入临界区,另一个进程等待进入
D. 表示有两个进程进入临界区

26. 一个进程因在互斥信号量 mutex 上执行 V(mutex)操作而导致唤醒另一个进程时,执行 V 操作后 mutex 的值为 ( )。

A. 大于 0
B. 小于 0
C. 大于或等于 0
D. 小于或等于 0

27. 一个系统中共有 5 个并发进程涉及某个相同的变量 A,变量 A 的相关临界区是由( )个临界区构成的。

A. 1
B. 3
C. 5
D. 6

28. 下述( )选项不是管程的组成部分。

A. 局限于管程的共享数据结构
B. 对管程内数据结构进行操作的一组过程
C. 管程外过程调用管程内数据结构的说明
D. 对局限于管程的数据结构设置初始值的语句

29. 以下关于管程的叙述中,错误的是( )。

A. 管程是进程同步工具,解决信号量机制大量同步操作分散的问题
B. 管程每次只允许一个进程进入管程
C. 管程中 signal 操作的作用和信号量机制中的 V 操作相同
D. 管程是被进程调用的,管程是语法范围,无法创建和撤销

30. 对信号量 S 执行 P 操作后,使该进程进入资源等待队列的条件是( )。

A. S.value &lt; 0
B. S.value &lt;= 0
C. S.value &gt; 0
D. S.value &gt;= 0

31. 若系统有 $n$ 个进程,则就绪队列中进程的个数最多有(①)个;阻塞队列中进程的个数最多有(②)个。

① A. $n + 1$
B. $n$
C. $n - 1$
D. 1

② A. $n + 1$
B. $n$
C. $n - 1$
D. 1

32. 下列关于 PV 操作的说法中,正确的是( )。

I. PV 操作是一种系统调用命令
II. PV 操作是一种低级进程通信原语
III. PV 操作是由一个不可被中断的过程组成
IV. PV 操作是由两个不可被中断的过程组成

A. I、III
B. II、IV
C. I、II、IV
D. I、IV

33. 下列关于临界区和临界资源的说法中,正确的是( )。

I. 银行家算法可以用来解决临界区(Critical Section)问题
II. 临界区是指进程中用于实现进程互斥的那段代码
III. 公用队列属于临界资源
IV. 私用数据属于临界资源

A. I、II
B. I、IV
C. 仅 III
D. 以上答案都错误

34. 有一个计数信号量 $S$:

1)假如若干进程对 $S$ 进行 28 次 P 操作和 18 次 V 操作后,信号量 $S$ 的值为 0。
2)假如若干进程对信号量 $S$ 进行了 15 次 P 操作和 2 次 V 操作。请问此时有多少个进


<!-- page: 128 -->

程等待在信号量 $S$ 的队列中?()

A. 2

B. 3

C. 5

D. 7

35. 有两个并发进程 $\mathrm{P}_1$ 和 $\mathrm{P}_2$,其程序代码如下:

P1() {
x=1;     //A1
y=2;
z=x+y;
print z; //A2
}
P2() {
x=-3;     //B1
c=x*x;
print c; //B2
}
可能打印出的 $z$ 值有(),可能打印出的 $c$ 值有()(其中 $x$ 为 $\mathrm{P}_1, \mathrm{P}_2$ 的共享变量)。 A. $z = 1, -3$; $c = -1.9$ B. $z = -1.3$; $c = 1.9$ C. $z = -1.3, 1$; $c = 9$ D. $z = 3$; $c = 1.9$ 36. 并发进程之间的关系是()。 A. 无关的 B. 相关的 C. 可能相关的 D. 可能是无关的,也可能是有交往的 37. 若系统中有 4 个进程共享 3 台打印机,采用信号量机制控制打印机的共享使用,则信号量的取值范围是()。 A. $[-1, 4]$ B. $[-2, 2]$ C. $[-1, 3]$ D. $[-3, 2]$ 38. 两个进程 $\mathrm{P}_0, \mathrm{P}_1$ 互斥的 Peterson 算法描述如下: 进程 P0 flag[0]=1; (1); while (flag[1] &amp;&amp; turn == 1); 临界区; flag[0]=0; 其余代码; 进程 P1 flag[1]=1; (2); while (flag[0] &amp;&amp; turn == 0); 临界区; flag[1]=0; 其余代码; 其中,(1) 和 (2) 处的代码分别为()。 A. $\text{turn} = 0, \text{turn} = 0$ B. $\text{turn} = 0, \text{turn} = 1$ C. $\text{turn} = 1, \text{turn} = 0$ D. $\text{turn} = 1, \text{turn} = 1$ 39. 在 Peterson 算法中,flag 数组的作用是()。 A. 表示每个线程是否想进入临界区 B. 表示每个线程是否已进入临界区 C. 表示每个线程是否已退出临界区 D. 表示每个线程是否已完成任务 40. 在 Peterson 算法中,turn 变量的作用是()。 A. 表示轮到哪个线程进入临界区 B. 表示哪个线程先发出访问请求 C. 表示哪个线程后发出访问请求 D. 表示哪个线程已进入临界区 41. 生产者-消费者问题用于解决()。 A. 多个进程共享一个数据对象的问题 B. 多个进程之间的同步和互斥问题 C. 多个进程共享资源的死锁与饥饿问题 D. 利用信号量实现多个进程并发的问题 42. 所有的消费者必须等待生产者先运行的前提条件是()。 A. 缓冲区空 B. 缓中区满 C. 缓冲区不可用 D. 缓冲区半空 43. 下列关于生产者-消费者问题的唤醒操作的说法中,正确的是()。 I. 生产者唤醒其他生产者 II. 生产者唤醒消费者 III. 消费者唤醒其他消费者 IV. 消费者唤醒生产者 A. I 和 II B. III 和 IV C. II 和 III D. I、II、III 和 IV 44. 在 9 个生产者、6 个消费者共享容量为 8 的缓冲区的生产者-消费者问题中,互斥使用缓 <!-- page: 129 --> 冲区的信号量初始值为( )。 A. 1 B. 6 C. 8 D. 9 45. 消费者进程阻塞在 wait(m)(m 是互斥信号量)的条件是( )。 I. 没有空缓冲区 II. 没有满缓冲区 III. 有其他生产者已进入临界区 IV. 有其他消费者已进入临界区 A. I 和 II B. III 和 IV C. I 和 III D. II 和 IV 46. 在读者-写者问题中,能同时执行的是( )。 A. 读者和写者 B. 不同的写者 C. 不同的读者 D. 都不能 47. 在哲学家就餐问题中,若同时存在左撇子和右撇子(将先拿起左边筷子的人称为左撇子,而将先拿起右边筷子的人称为右撇子),则不会发生死锁,因为破坏了( )。 A. 互斥条件 B. 请求与保持条件 C. 不剥夺条件 D. 循环等待条件 48. 哲学家就餐问题的解决方案如下:
semaphore *chopstick[5];
semaphore *seat;
哲学家 i:
...
P(seat);
P(chopStick[i]);
P(chopStick[(i+1)%5]);
吃饭
V(chopStick[i]);
V(chopStick[(i+1)%5]);
V(seat)
其中,信号量 seat 的初值为( )。 A. 0 B. 1 C. 4 D. 5 49. 有两个优先级相同的并发程序 $\mathrm{P}_1$ 和 $\mathrm{P}_2$,它们的执行过程如下所示。假设当前信号量 $s1 = 0$,$s2 = 0$。当前的 $z = 2$,进程运行结束后,$x, y$ 和 $z$ 的值分别是( )。 进程 $\mathrm{P}_1$ 进程 $\mathrm{P}_2$ ... y:=1; x:=1 y:=y+2; x:=x+1; z:=y+1; P(s1); V(s1); x:=x+y; P(s2); z:=x+z; y:=z+y; V(s2); ... A. 5, 9, 9 B. 5, 9, 4 C. 5, 12, 9 D. 5, 12, 4 50. 【2010 统考真题】设与某资源关联的信号量初值为 3,当前值为 1。若 $M$ 表示该资源的可用个数,$N$ 表示等待该资源的进程数,则 $M, N$ 分别是( )。 A. 0, 1 B. 1, 0 C. 1, 2 D. 2, 0 51. 【2010 统考真题】进程 $\mathrm{P}_0$ 和进程 $\mathrm{P}_1$ 的共享变量定义及其初值为:
boolean flag[2];
int turn=0;
flag[0]=false; flag[1]=false;
若进程 $\mathrm{P}_0$ 和进程 $\mathrm{P}_1$ 访问临界资源的类 C 代码实现如下:
void P0() //进程P0 void P1() //进程P1
{
while(true) while(true)
{


&lt;!-- page: 130 --&gt;

```c
flag[0]=true;turn=1; flag[1]=true;turn=0;
while(flag[1] &amp;amp;&amp;amp; (turn==1)); while(flag[0] &amp;amp;&amp;amp; (turn==0));
临界区; 临界区;
flag[0]=false; flag[1]=false;
}
别并发执行进程 $\mathrm{P_0}$ 和进程 $\mathrm{P_1}$ 时产生的情况是 ( )。 A. 不能保证进程互斥进入临界区,会出现“饥饿”现象 B. 不能保证进程互斥进入临界区,不会出现“饥饿”现象 C. 能保证进程互斥进入临界区,会出现“饥饿”现象 D. 能保证进程互斥进入临界区,不会出现“饥饿”现象 52.【2011统考真题】有两个并发执行的进程 $\mathrm{P_1}$ 和进程 $\mathrm{P_2}$,共享初值为 1 的变量 $\mathrm{x}$。$\mathrm{P_1}$ 对 $\mathrm{x}$ 加 1,$\mathrm{P_2}$ 对 $\mathrm{x}$ 减 1。加 1 和减 1 操作的指令序列分别如下:
//加1操作 //减1操作
load R1,x //取x到寄存器R1 load R2,x //取x到寄存器R2
inc R1 dec R2
store x,R1 //将R1的内容存入x store x,R2 //将R2的内容存入x
两个操作完成后,$\mathrm{x}$ 的值()。 A. 可能为 -1 或 3 B. 只能为 1 C. 可能为 0.1 或 2 D. 可能为 -1、0.1 或 2 53.【2016统考真题】进程 $\mathrm{P_1}$ 和 $\mathrm{P_2}$ 均包含并发执行的线程,部分伪代码描述如下所示。
//进程P1
int x=0;
Thread1();
int a;
a=1; x+=1;
;
Thread2();
int a;
a=2; x+=2;
//进程P2
int x=0;
Thread3();
int a;
a=x; x+=3;
;
Thread4();
int b;
b=x; x+=4;
下列选项中,需要互斥执行的操作是()。 A. $a = 1$ 与 $a = 2$ B. $a = x$ 与 $b = x$ C. $x + = 1$ 与 $x + = 2$ D. $x + = 1$ 与 $x + = 3$ 54.【2016统考真题】使用TSL(Test and Set Lock)指令实现进程互斥的伪代码如下所示。
do{
...
while(TSL(&amp;amp;lock));
critical section;
lock=FALSE;
...
} while(TRUE);
下列与该实现机制相关的叙述中,正确的是()。 A. 退出临界区的进程负责唤醒阻塞态进程 B. 等待进入临界区的进程不会主动放弃 CPU <!-- page: 131 --> C. 上述伪代码满足“让权等待”的同步准则 D. while(TSL(&amp;lock))语句应在关中断状态下执行 55. 【2016 统考真题】下列关于管程的叙述中,错误的是( )。 A. 管程只能用于实现进程的互斥 B. 管程是由编程语言支持的进程同步机制 C. 任何时候只能有一个进程在管程中执行 D. 管程中定义的变量只能被管程内的过程访问 56. 【2018 统考真题】属于同一进程的两个线程 thread1 和 thread2 并发执行,共享初值为 0 的全局变量 x。thread1 和 thread2 实现对全局变量 x 加 1 的机器级代码描述如下。 [tbl-30.md](tbl-30.md) 在所有可能的指令执行序列中,使 x 的值为 2 的序列个数是( )。 A. 1 B. 2 C. 3 D. 4 57. 【2018 统考真题】若 x 是管程内的条件变量,则当进程执行 x wait() 时所做的工作是( )。 A. 实现对变量 x 的互斥访问 B. 嗅醒一个在 x 上阻塞的进程 C. 根据 x 的值判断该进程是否进入阻塞态 D. 阻塞该进程,并将之插入 x 的阻塞队列中 58. 【2018 统考真题】在下列同步机制中,可以实现让权等待的是( )。 A. Peterson 方法 B. swap 指令 C. 信号量方法 D. TestAndSet 指令 59. 【2020 统考真题】下列准则中,实现临界区互斥机制必须遵循的是( )。 I. 两个进程不能同时进入临界区 II. 允许进程访问空闲的临界资源 III. 进程等待进入临界区的时间是有限的 IV. 不能进入临界区的执行态进程立即放弃 CPU A. 仅 I, IV B. 仅 II, III C. 仅 I, II, III D. 仅 I, III, IV ## 二、综合应用题 01. 下面是两个并发执行的进程,它们能正确运行吗?若不能清单例说明并改正。
int x;
process_P1{ process_P2{
int y, z; int t, u;
x=1; x=0;
y=0; t=0;
if (x&amp;gt;=1) if (x&amp;lt;=1)
y=y+1; t=t+2;
z=y; u=t;
}
02. 在一个全库中可以存放 A 和 B 两种产品,要求: ① 每次只能存入一种产品。 <!-- page: 132 --> ② A 产品数量 - B 产品数量 $&lt; M$,其中 $M$ 是正整数。 ③ B 产品数量 - A 产品数量 $&lt; N$,其中 $N$ 是正整数。 假设仓库的容量是无限的,试用 $\mathrm{P}_1\mathrm{V}$ 操作描述产品A和B的入库过程。 03. 面包师有很多面包,由 $n$ 名销售人员推销。每名顾客进店后按序取一个号,并且等待叫号,当一名销售人员空闲时,就按序叫下一个号。可以用两个整型变量来记录当前的取号值和叫号值,试设计一个使销售人员和顾客同步的算法。 04. 某工厂有两个生产车间和一个装配车间,两个生产车间分别生产A、B两种零件,装配车间的任务是把A、B两种零件组装成产品。两个生产车间每生产一个零件后,都要分别把它们送到专配车间的货架 $\mathrm{F}_1, \mathrm{F}_2$ 上。$\mathrm{F}_1$ 存放零件A,$\mathrm{F}_2$ 存放零件B,$\mathrm{F}_1$ 和 $\mathrm{F}_2$ 的容量均可存放10个零件。装配工人每次从货架上取一个零件A和一个零件B后组装成产品。请用P,V操作进行正确管理。 05. 某寺庙有小和尚、老和尚若干,有一水缸,由小和尚提水入缸供老和尚饮用。水缸可容10桶水,水取自同一井中。水井径窄,每次只能容一个桶取水。水桶总数为3个。每次入缸取水仅为1桶水,且不可同时进行。试给出有关从缸取水、入水的算法描述。 06. 如下图所示,三个合作进程 $\mathrm{P}_1, \mathrm{P}_2, \mathrm{P}_3$,它们都需要通过同一设备输入各自的数据 $\mathrm{a}, \mathrm{b}, \mathrm{c}$,该输入设备必须互斥地使用,而且其第一个数据必须由 $\mathrm{P}_1$ 进程读取,第二个数据必须由 $\mathrm{P}_2$ 进程读取,第三个数据必须由 $\mathrm{P}_3$ 进程读取。然后,三个进程分别对输入数据进行下列计算: $\mathrm{P}_1: \mathrm{x} = \mathrm{a} + \mathrm{b}$ $\mathrm{P}_2: \mathrm{y} = \mathrm{a} * \mathrm{b}$ $\mathrm{P}_3: \mathrm{z} = \mathrm{y} + \mathrm{c} - \mathrm{a}$ 最后,$\mathrm{P}_1$ 进程通过所连接的打印机将计算结果 $\mathrm{x}, \mathrm{y}, \mathrm{z}$ 的值打印出来。请用信号量实现它们的同步。 07. 有桥如下图所示。车流方向如箭头所示。回答如下问题: 1)假设桥上每次只能有一辆车行驶,试用信号灯的P,V操作实现交通管理。 2)假设桥上不允许两车交会,但允许同方向多辆车一次通过(桥上可有多辆同方向行驶的车)。试用信号灯的P,V操作实现桥上的交通管理。 <!-- page: 133 --> 08. 假设有两个线程(编号为 0 和 1)需要去访问同一个共享资源,为避免竞争状态的问题,我们必须实现一种互斥机制,使得在任何时候只能有一个线程访问这个资源。假设有如下一段代码:
bool flag[2]; //flag 数组,初始化为 FALSE
Enter_Critical_Section(int my_thread_id, int other_thread_id) {
while (flag[other_thread_id] == TRUE); //空循环语句
flag[my_thread_id] = TRUE;
}
Exit_Critical_Section(int my_thread_id, int other_thread_id) {
flag[my_thread_id] = FALSE;
}
当一个线程想要访问临界资源时,就调用上述的这两个函数。例如,线程 0 的代码可能是这样的:
Enter_Critical_Section(0,1);
使用这个资源;
Exit_Critical_Section(0,1);
做其他的事情;
试问: 1)以上的这种机制能够实现资源互斥访问吗?为什么? 2)若把 Enter_Critical_Section() 函数中的两条语句互换位置,可能发生死锁吗? 09. 设自行车生产线上有一个箱子,其中有 $N$ 个位置 $(N \geqslant 3)$,每个位置可存放一个车架或一个车轮;又设有 3 名工人,其活动分别为: 工人 1 活动: 工人 2 活动: 工人 3 活动:
do { do { do {箱中取一个车架;
加工一个车架; 加工一个车轮; 箱中取二个车轮;
车架放入箱中; 车轮放入箱中; 组装为一台车;
} while (1) } while (1) } while (1)
试分别用信号量与 PV 操作实现三名工人的合作,要求解中不含死锁。 10. 设 P, Q, R 共享一个缓冲区,P, Q 构成一对生产者-消费者,R 既为生产者又为消费者,若缓冲区为空,则可以写入;若缓冲区不空,则可以读出。使用 P, V 操作实现其同步。 11. 理发店里有一位理发师、一把理发椅和 $n$ 把供等候理发的顾客坐的椅子。若没有顾客,理发师便在理发椅上睡觉,一位顾客到来时,顾客必须叫醒理发师,若理发师正在理发时又有顾客来到,若有空椅子可坐,则坐下来等待,否则就离开。试用 P, V 操作实现,并说明信号量的定义和初值。 12. 假设一个录像厅有 1, 2, 3 三种不同的录像片可由观众选择放映,录像厅的放映规则如下: 1)任意时刻最多只能放映一种录像片,正在放映的录像片是自动循环放映的,最后一名观众主动离开时结束当前录像片的放映。 2)选择当前正在放映的录像片的观众可立即进入,允许同时有多位选择同一种录像片的观众同时观看,同时观看的观众数量不受限制。 3)等待观看其他录像片的观众按到达顺序排队,当一种新的录像片开始放映时,所有等待观看该录像片的观众可依次序进入录像厅同时观看。用一个进程代表一个观众,要求:用信号量方法 PV 操作实现,并给出信号量定义和初始值。 13. 设公共汽车上驾驶员和售票员的活动分别如下图所示。驾驶员的活动:启动车辆,正常行车,到站停车;售票员的活动:关车门,售票,开车门。在汽车不断地到站、停车、行驶的过程中,这两个活动有什么同步关系?用信号量和 P, V 操作实现它们的同步。 <!-- page: 134 --> 14. 一组进程的执行顺序如下图所示,圆圈 $\mathrm{P}_1, \mathrm{P}_2, \mathrm{P}_3, \mathrm{P}_4, \mathrm{P}_5, \mathrm{P}_6$ 表示进程,弧上的字母a,b,c,d,e,f,g,h表示同步信号量,请用P,V操作实现进程的同步。 15. 有 3 个进程 $\mathrm{P}, \mathrm{P}_1, \mathrm{P}_2$ 合作处理数据,P 从输入设备读数据到缓冲区,缓冲区可存 1000 个字。$\mathrm{P}_1$ 和 $\mathrm{P}_2$ 的功能一样,都是从缓冲区取出数据并计算,再打印结果。请用信号量的 P,V 操作实现。其中,语句 read() 从输入设备读入 20 个字到缓冲区;get() 从缓冲区取出 20 个字;comp() 计算 40 个字输出并得到结果的 1 个字;print() 打印结果的 2 个字。 16. 假设有 3 个抽烟者和 1 个供应者。每个抽烟者不停地卷烟并抽掉它,但要卷起并抽掉一支烟,抽烟者需要有三种材料:烟草、纸和胶水。三个抽烟者中,第一个拥有烟草,第二个拥有纸,第三个拥有胶水。供应者无限提供三种材料,供应者每次将两种材料放到桌子上,拥有剩下那种材料的抽烟者卷一根烟并抽掉它,并给供应者一个信号告诉已完成,此时供应者就将另外两种材料放到桌上,如此重复,让 3 个抽烟者轮流抽烟。 17. 【2009 统考真题】三个进程 $\mathrm{P}_1, \mathrm{P}_2, \mathrm{P}_3$ 互斥使用一个包含 $N(N &gt; 0)$ 个单元的缓冲区。$\mathrm{P}_1$ 每次用 produce() 生成一个正整数并用 put() 送入缓冲区某一空单元;$\mathrm{P}_2$ 每次用 getodd() 从该缓冲区中取出一个奇数并用 countodd() 统计奇数个数;$\mathrm{P}_3$ 每次用 geteven() 从该缓冲区中取出一个偶数并用 counteven() 统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义(要求用伪代码描述)。 18. 【2011 统考真题】某银行提供 1 个服务窗口和 10 个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:
cobegin
{
process 顾客 i
{
从取号机获取一个号码;
等待叫号;
获取服务;
}
process 营业员
{
While (TRUE)
{
叫号;
为客户服务;
}
<!-- page: 135 -->
}
}
}coend
请添加必要的信号量和 P, V [ 或 wait(), signal() ] 操作,实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。 19. 【2013 统考真题】某博物馆最多可容纳 500 人同时参观,有一个出入口,该出入口一次仅允许一人通过。参观者的活动描述如下:
cobegin
参观者进程 i:
;

进门;

参观;

出门;
}
coend
请添加必要的信号量和 P, V [ 或 wait(), signal() ] 操作,以实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。 20. 【2014 统考真题】系统中有多个生产者进程和多个消费者进程,共享一个能存放 1000 件产品的环形缓冲区(初始为空)。缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;缓冲区未空时,消费者进程可从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出 10 件产品后,其他消费者进程才可以取产品。请使用信号量 P, V (wait(), signal()) 操作实现进程间的互斥与同步,要求写出完整的过程,并说明所用信号量的含义和初值。 21. 【2015 统考真题】有 A, B 两人通过信箱进行辩论,每个人都从自己的信箱中取得对方的问题。将答案和向对方提出的新问题组成一个邮件放入对方的邮箱中。假设 A 的信箱最多放 $M$ 个邮件,B 的信箱最多放 $N$ 个邮件。初始时 A 的信箱中有 $x$ 个邮件 $(0 &lt; x &lt; M)$,B 的信箱中有 $y$ 个邮件 $(0 &lt; y &lt; N)$。辩论者每取出一个邮件,邮件数减 1。A 和 B 两人的操作过程描述如下: CoBegin [tbl-31.md](tbl-31.md) CoEnd 当信箱不为空时,辩论者才能从信箱中取邮件,否则等待。当信箱不满时,辩论者才能将新邮件放入信箱,否则等待。请添加必要的信号量和 P, V [ 或 wait(), signal() ] 操作,以实现上述过程的同步。要求写出完整的过程,并说明信号量的含义和初值。 22. 【2017 统考真题】某进程中有 3 个并发执行的线程 thread1, thread2 和 thread3,其伪代码如下所示。 <!-- page: 136 --> [tbl-32.md](tbl-32.md) 请添加必要的信号量和P,V[或wait(), signal()]操作,要求确保线程互斥访问临界资源,并且最大限度地并发执行。 23. 【2019统考真题】有 $n (n \geqslant 3)$ 名哲学家固坐在一张圆桌边,每名哲学家交替地就餐和思考。在圆桌中心有 $m (m \geqslant 1)$ 个碗,每两名哲学家之间有一根筷子。每名哲学家必须取到一个碗和两侧的筷子后,才能就餐,进餐完毕,将碗和筷子放回原位,并继续思考。为使尽可能多的哲学家同时就餐,且防止出现死锁现象,请使用信号量的P,V操作[wait()。signal()操作]描述上述过程中的互斥与同步,并说明所用信号量及初值的含义。 24. 【2020统考真题】现有5个操作A、B、C、D和E,操作C必须在A和B完成后执行,操作E必须在C和D完成后执行,请使用信号量的wait()、signal()操作(P、V操作)描述上述操作之间的同步关系,并说明所用信号量及其初值。