同一方向的行人可连续过桥,当某一方向有人过桥时,另一方向的行人必须等待;当某一方向无人过桥时,另一方向的行人可以过桥。 1)需要设置几个信号量?分别是互斥信号量还是同步信号量?初值设为多少?并说明设置它们的意义2)用课上方式写出用信号量机制解决此问题的算法
时间: 2024-10-18 14:10:12 浏览: 132
这个问题描述的是经典的“桥梁过河”问题,可以用信号量来管理两个方向的行人过桥。在这种场景下,我们需要设置两个信号量:
1. **第一个信号量**,我们称之为`wait_semaphore`,它表示当前是否有行人正在过桥。这个信号量应该是一个互斥信号量(mutex),初始值设为1,因为默认状态下,两方向都没有人过桥,所以只有一个行人能同时通过。
2. **第二个信号量**,我们称之为`cross_semaphore`,它用于控制每一轮过桥的方向。如果当前方向有人,另一个方向的行人才能等待。由于每次只有一方向允许过桥,所以这是一个同步信号量(semaphore), 初始值也为1。
以下是用信号量机制解决该问题的一个简单算法:
```c
typedef struct {
semaphore wait_semaphore; // 互斥信号量
semaphore cross_semaphore; // 同步信号量
} BridgeControl;
void pedestrian_cross(BridgeControl* bridge, int direction) {
acquire(wait_semaphore); // 获取过桥权
if (direction == CURRENT_DIR) { // 当前方向
wait(cross_semaphore); // 等待对面方向结束
}
// 过桥操作...
release(cross_semaphore); // 让对面方向通行
release(wait_semaphore); // 释放过桥权,允许下一个行人过桥
}
// 主循环处理行人请求
while (true) {
if (request_to_cross(direction)) { // 请求过桥
pedestrian_cross(bridge, direction);
}
}
```
阅读全文
相关推荐













