商洛火车站下面有三个火车票代售点,假如说商洛到宁波的火车票总共是200张,编写程序实现三个售票点同时卖票的功能
时间: 2024-02-09 09:13:36 浏览: 76
好的,我来帮你解决这个问题。首先,我们需要先定义一个共享资源,也就是商洛到宁波的火车票总数。然后,我们需要创建三个线程,分别模拟三个售票点。在每个线程中,我们需要加锁来保证同一时刻只有一个线程能够访问共享资源。每个线程的售票过程如下:
1. 判断当前剩余的火车票数量是否大于0,如果是,继续执行;否则,退出售票过程。
2. 从火车票总数中减去1,代表售出了一张火车票。
3. 打印出当前售票点售出的票数以及剩余的票数。
下面是一个示例代码:
```python
import threading
ticket_count = 200
lock = threading.Lock()
def sell_tickets(name):
global ticket_count
while ticket_count > 0:
lock.acquire()
if ticket_count > 0:
ticket_count -= 1
print("{}售出了1张票,剩余{}张票".format(name, ticket_count))
lock.release()
if __name__ == "__main__":
t1 = threading.Thread(target=sell_tickets, args=("售票点1",))
t2 = threading.Thread(target=sell_tickets, args=("售票点2",))
t3 = threading.Thread(target=sell_tickets, args=("售票点3",))
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
```
在上面的代码中,我们创建了三个线程,分别代表三个售票点。每个线程执行的函数是 `sell_tickets`,其中 `name` 参数代表售票点的名称。在函数中,我们首先获得锁,然后判断当前剩余的票数是否大于0。如果是,就从总票数中减去1,然后打印出当前售票点售出的票数以及剩余的票数。最后,释放锁,让其他线程能够访问共享资源。
当我们运行这个程序时,会看到三个售票点同时卖票,直到所有的火车票都售完为止。
阅读全文