进程同步,司机与售票员。售票员把车门关好,司机才能启动开车。设置信号量及其初始值,并且在相应位置上补充wait、signal代码。(小写输入) D,表示售票员给司机的信号,D-Value初始值为0
时间: 2024-09-25 11:01:44 浏览: 57
进程同步是一种操作系统机制,用于控制并发程序中多个线程或进程之间的执行顺序,确保资源访问的一致性和避免竞态条件。在这个例子中,我们可以使用信号量(Semaphore)来模拟售票员(Driver)和售票员(Conductor)之间的交互。信号量通常是一个计数器,初始化值决定了对资源的操作权限。
假设我们有两个信号量:`start_semaphore`(表示司机可以开车的权限,初始值为1)和 `door_closed_semaphore`(表示车门已关闭,初始值为1)。售票员(Conductor)先执行以下操作:
```c
// Conductor (售票员)
int door_closed_value = 1; // 初始化车门关闭信号量
void conductor_action() {
if (door_closed_value > 0) { // 车门未关闭
printf("售票员等待车门关闭...\n");
wait(&door_closed_semaphore); // 等待信号量车门关闭
printf("车门已关闭,通知司机...\n");
signal(&start_semaphore); // 发送信号给司机,告诉车门已关闭
door_closed_value--; // 减少车门关闭信号量,表明车门已被关闭
}
}
```
接着是司机(Driver):
```c
// Driver (司机)
int start_value = 1; // 初始化启动信号量
void driver_action() {
while (start_value == 0) { // 只有当启动信号为1时,才尝试启动
printf("司机等待售票员确认车门关闭...\n");
wait(&start_semaphore); // 等待车门关闭信号
printf("收到信号,可以开车了...\n");
start_value++; // 提升启动信号,允许自己开始驾驶
}
// 开始驾车...
signal(&start_semaphore); // 当司机完成驾驶后,释放启动信号
}
```
在这个场景中,`wait(&door_closed_semaphore)` 和 `signal(&start_semaphore)` 分别表示售票员让司机等待和司机得到出发许可的操作。当车门关闭后,售票员会减少`door_closed_value`,然后司机才会获得启动汽车的权利。
阅读全文