电影院卖票问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例程序,使用线程同步(互斥锁)来模拟电影院卖票的过程: ```python import threading class Ticket: def __init__(self, total): self.total = total self.lock = threading.Lock() def sell(self): self.lock.acquire() if self.total > 0: print(f"售票窗口{threading.current_thread().name}卖出一张票,剩余{self.total-1}张票") self.total -= 1 else: print("票已售完") self.lock.release() def sell_tickets(ticket): while ticket.total > 0: ticket.sell() if __name__ == "__main__": ticket = Ticket(100) threads = [] for i in range(3): thread = threading.Thread(target=sell_tickets, args=(ticket,), name=f"窗口{i+1}") threads.append(thread) thread.start() for thread in threads: thread.join() ``` 在这个例子中,我们创建了一个`Ticket`类来管理电影院的票数。`Ticket`类拥有一个总票数的属性`total`,以及一个互斥锁`lock`用于线程同步。`sell()`方法用于卖票,其中使用`lock.acquire()`获取锁,确保在同一时刻只有一个线程能执行卖票操作,然后根据剩余票数进行售票或者显示票已售完的信息,最后使用`lock.release()`释放锁。 在主程序中,我们创建了3个线程模拟3个售票窗口,每个窗口不断地调用`sell_tickets()`函数进行售票,直到票已售完。使用`threading.Thread`创建线程,并使用`start()`方法启动线程。最后使用`join()`方法等待所有线程执行完毕。 通过互斥锁的使用,确保了线程同步,避免了错误的买票数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值