有K个进程共享一个临界区,对于下述情况,请说明信号量值的初值,含义,并用WAIT、SIGNAL操作写出相关的互斥算法。 1) 一次只允许一个进程进入临界区 2) 一次只允许m个进程进入临界区
时间: 2023-05-29 19:03:28 浏览: 105
1) 初值为1,含义为临界区可被一个进程访问。互斥算法如下:
```
//进入临界区
WAIT(S)
//访问临界区
//离开临界区
SIGNAL(S)
```
2) 初值为m,含义为临界区可被最多m个进程访问。互斥算法如下:
```
//进入临界区
WAIT(S)
//访问临界区
//离开临界区
SIGNAL(S)
```
需要注意的是,当临界区内进程数达到m时,其他进程需要等待,直到有进程离开临界区才能进入。
相关问题
m 个并发进程共用一个公共变量 X,写出用信号量实现m个进程互斥时的程序描述(伪代码), 给出信号量值的取值范围, 并说明每个取值的物理意义。
好的,我明白了。对于您的第一个问题,以下是伪代码实现:
创建信号量mutex,初值为1
创建信号量full,初值为0
创建信号量empty,初值为m
进程P1:
wait(empty)
wait(mutex)
# 公共变量X的临界区操作
signal(mutex)
signal(full)
进程P2 ~ Pm:
wait(empty)
wait(mutex)
# 公共变量X的临界区操作
signal(mutex)
signal(full)
进程P1和进程P2 ~ Pm的执行顺序不确定,但是它们的互斥性得到了保证。其中,信号量mutex用于互斥,信号量full用于表示临界区是否空闲,信号量empty用于表示还有多少进程等待进入临界区。
信号量mutex的取值范围为0和1,其中,0表示临界区被占用,1表示临界区空闲。信号量full的取值范围为0到m,其中,0表示临界区被占用,m表示临界区空闲。信号量empty的取值范围为0到m,其中,0表示没有进程等待进入临界区,m表示所有进程都在等待进入临界区。
(8)设有n个进程共享一个互斥段,如果:① 每次只允许一个进程进入互斥段;②每次最多允许m个进程(m≤n)同时进入互斥段。试问:以上两种情况下所采用的信号量初值是否相同?试给 出信号量值的变化范围。
以上两种情况下所采用的信号量初值不同。
对于第一种情况,只允许一个进程进入互斥段,可以使用二元信号量,初值为1。
对于第二种情况,最多允许m个进程同时进入互斥段,可以使用一个计数信号量,初值为m。
信号量值的变化范围如下:
对于第一种情况,当有进程进入互斥段时,二元信号量的值减1;当进程离开互斥段时,二元信号量的值加1。因此,二元信号量的值的变化范围为[0, 1]。
对于第二种情况,当有进程进入互斥段时,计数信号量的值减1;当进程离开互斥段时,计数信号量的值加1。因此,计数信号量的值的变化范围为[0, m]。