在公共汽车上,司机和售票员的工作流程如图所示。为保证乘客的安全,司机和售票员应密切配合协调工作。请用信号量来实现司机与售票员之间的同步。 司机和售票员工作流程图.png
时间: 2024-10-19 11:12:09 浏览: 177
在公共汽车上,使用信号量可以确保司机和售票员之间的协作不会同时发生可能导致混乱的操作。我们可以设置两个类型的信号量:`mutexBus` 和 `ticketAvailable`。
1. `mutexBus` (互斥锁): 表示一次只有一个角色(司机或售票员)可以在驾驶台上有操作权限。当售票员完成售票后,需要释放这个锁,让司机可以继续行驶;同样,司机在操作车辆设备前也需要获取它,保证其他操作不受干扰。
2. `ticketAvailable`: 用于表示当前公交车上还有多少张票可供售票。当售票员售出一张票,就减少这个值,并通知司机是否可以启程(如果`ticketAvailable`为0,意味着满座,不允许启动)。
以下是简化的伪代码实现:
```python
import threading
# 初始化信号量
mutexBus = threading.Semaphore(1) # 只允许一人操作驾驶台
ticketAvailable = threading.Semaphore(10) # 初始10张票
def driver_operation():
mutexBus.acquire() # 获取驾驶台权限
if ticketAvailable.value > 0:
print("开车")
ticketAvailable.release() # 减少票数并唤醒售票员
else:
print("车已满,不启动")
mutexBus.release()
def conductor_operation():
mutexBus.acquire() # 确保售票员独自操作
ticketSold = get_ticket_from_passenger() # 模拟售票过程
if ticketSold:
ticketAvailable.acquire() # 减少票数
print(f"售出{ticketSold}张票")
ticketAvailable.release()
mutexBus.release()
driver_thread = threading.Thread(target=driver_operation)
conductor_thread = threading.Thread(target=conductor_operation)
driver_thread.start()
conductor_thread.start()
```
阅读全文
相关推荐

















