某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。若把一个购票者看作一个进程,请回答下列问题。 (1)用PV操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值以及信号量各种取值的含义。 (2)根据所定义的信号量,利用PV操作写出能正确并发执行的进程。
时间: 2024-03-09 10:49:41 浏览: 169
操作系统课程设计——使用PV操作模拟实现车站大厅售票
(1)用PV操作管理这些并发进程时,可以定义一个信号量ticket表示售票厅中购票者的数量,初始值为0。另外,可以定义一个信号量mutex表示互斥访问售票厅的购票者数量,初始值为1。信号量ticket的各种取值含义如下:
- ticket = 0:售票厅中没有购票者,其他购票者可以进入售票厅;
- ticket < 20:售票厅中购票者数量小于20,其他购票者可以进入售票厅;
- ticket = 20:售票厅中购票者数量已经达到20,其他购票者需要等待。
信号量mutex的各种取值含义如下:
- mutex = 1:售票厅中没有购票者或者只有一名购票者,其他购票者可以进入售票厅;
- mutex = 0:售票厅中已经有一名购票者,其他购票者需要等待。
(2)根据所定义的信号量,可以编写两个并发进程,分别为“进入售票厅的购票者”和“离开售票厅的购票者”,具体实现如下:
进入售票厅的购票者进程:
```
P(mutex)
if ticket < 20:
V(mutex)
P(ticket)
// 进入售票厅购票
V(ticket)
else:
V(mutex)
// 在外面等待
```
离开售票厅的购票者进程:
```
P(ticket)
// 离开售票厅
V(mutex)
```
在进入售票厅的购票者进程中,首先使用P操作对mutex信号量进行加锁,如果售票厅中购票者数量小于20,则使用V操作对mutex信号量进行解锁,使用P操作对ticket信号量进行减1操作,表示售票厅中购票者数量增加了一个,购票者可以进入售票厅购票。如果售票厅中购票者数量已经达到20,则使用V操作对mutex信号量进行解锁,购票者需要在外面等待。在离开售票厅的购票者进程中,使用V操作对ticket信号量进行加1操作,表示售票厅中购票者数量减少了一个,购票者离开售票厅,使用V操作对mutex信号量进行解锁,其他购票者可以进入售票厅。
阅读全文