17、利用线程实现以下功能:模拟三个人排队买票,张某、李某和赵某买电影票,售票员只有三张五元的钱,电影票5元钱一张。张某拿二十元一张的新人民币排在李的前面买票,李某排在赵的前面拿一张10元的人民币买票,赵
时间: 2024-04-04 17:30:33 浏览: 71
Java多线程模拟电影售票过程
某排在最后拿一张5元的人民币买票。如果售票员没有足够的钱找零,购票者需要等待直到售票员有足够的钱找零,然后才能购票。请编写一个程序实现以上功能。
```python
import threading
class TicketSeller:
def __init__(self):
self.money = 0
self.lock = threading.Lock()
def sell(self, buyer, money):
self.lock.acquire()
if self.money < money:
print("%s 等待找零..." % buyer)
while self.money < money:
self.lock.release()
self.lock.acquire()
self.money -= money
print("%s 购票成功,找零 %d 元" % (buyer, money-5))
self.lock.release()
if __name__ == '__main__':
seller = TicketSeller()
def buy_ticket(name, money):
seller.sell(name, money)
threads = []
threads.append(threading.Thread(target=buy_ticket, args=("张某", 20)))
threads.append(threading.Thread(target=buy_ticket, args=("李某", 10)))
threads.append(threading.Thread(target=buy_ticket, args=("赵某", 5)))
seller.money = 3 * 5 # 初始化售票员的钱
for t in threads:
t.start()
for t in threads:
t.join()
```
程序中使用了锁来保证售票员的钱不会出现负数。当售票员的钱不足以找零时,购票者需要等待,直到售票员有足够的钱才能购票。
阅读全文