在python中使用信号量,分别编写司机与售票员进程,程序应能检测到进程之间是否进行了有效通信。
时间: 2025-01-05 21:42:32 浏览: 4
在Python中,可以使用`multiprocessing`模块中的`Semaphore`(信号量)来控制并发访问共享资源的数量,防止竞态条件。这里我们构建一个简单的例子,模拟司机和售票员之间的交互:
首先,定义一个信号量,用于限制同时服务的乘客数:
```python
from multiprocessing import Process, Semaphore
# 创建一个信号量,初始值设为1,表示只有一个售票员
ticket_semaphore = Semaphore(1)
```
然后,定义司机和售票员的进程类:
```python
class Driver(Process):
def __init__(self, name):
super().__init__()
self.name = name
def run(self):
while True:
with ticket_semaphore: # 当获取信号量时,售票员正在服务,所以等待
print(f"{self.name} is driving and picking up a passenger.")
# 这里添加实际的乘客处理代码,例如从列表中移除乘客
pass
class TicketSeller(Process):
def __init__(self, name):
super().__init__()
self.name = name
def run(self):
while True:
ticket_semaphore.acquire() # 取得信号量,开始服务
print(f"{self.name} is selling tickets.")
# 这里添加卖出票的行为,并可能释放一个信号量
ticket_semaphore.release()
# 模拟服务结束
time.sleep(1) # 假设服务时间需要1秒
# 初始化司机和售票员
driver = Driver("Driver")
seller = TicketSeller("Ticket Seller")
# 启动进程
driver.start()
seller.start()
# 等待进程结束
driver.join()
seller.join()
```
在这个示例中,当司机请求乘客时,如果没有售票员服务,司机会等待直到信号量变为可用。而售票员在服务结束后会自动释放信号量,允许下一个司机继续。这样就实现了进程间的同步和有效通信。
阅读全文