如何使用信号量实现监视器?
为了使用信号量实现监视器,为每个监视器提供了一个信号量互斥锁(已初始化为1)。Wait(mutex)必须在进入监视器之前由进程执行,并且必须在离开监视器之后执行signal(mutex)。由于信令过程必须等待,直到恢复的过程离开或等待,所以引入了另一个信号量(下一步),初始化为0。信令过程可以使用next来挂起自身。还提供了一个整数变量next_count来计算next挂起的进程数。因此,每个外部功能F都由-
wait(mutex); … body of F ... if (next_count > 0) signal(next); else signal(mutex);
确保在监视器内相互排斥。现在让我们看看如何实现条件变量。对于每个条件x,我们引入一个信号量x_sem和一个整数变量x_count,它们都初始化为0。操作x.wait()现在可以实现为-
x_count++;
if (next_count > 0){
signal(next);
}
else {
signal(mutex);
}
wait(x_sem);
x_count--;操作x.signal()可以实现为-
if (x _count > 0){
next_count++;
signal(x_sem);
wait(next);
next_count--;
}热门推荐
1 训练狗狗基础
2 怎么训练狗狗笑
3 怎么训练狗狗卧下
4 上海狗狗训练基地
5 训练狗狗排便
6 狗狗基础训练
8 如何训练狗狗装死
9 狗狗站姿训练
10 狗狗训练用品
11 训练狗狗吧
12 狗狗要怎么训练
13 怎么训练狗狗玩球
14 训练狗狗唤回
15 狗狗训练躺下
16 狗狗训练指令
17 狗狗的训练技巧
18 狗狗不好训练