现有一个在线售票系统,总共有200张票,假设4个线程同时订票,网络传输延时为5毫秒,试编写程序模拟12306的售票过程。 进阶设计:试考虑同步机制。
时间: 2024-02-20 12:01:25 浏览: 75
以下是一个简单的Python程序,模拟了一个在线售票系统,使用了线程和锁来保证线程安全。程序中设置了200张票,4个线程不断地随机选择一张未售出的票进行购买,直到所有票都售出为止。在每次购买时,程序会模拟网络延迟,以增加并发量和模拟实际情况。
``` python
import threading
import random
import time
class OnlineTicketSystem:
def __init__(self, num_tickets = 200):
self.num_tickets = num_tickets
self.lock = threading.Lock()
self.tickets = [i+1 for i in range(num_tickets)]
def buy_ticket(self, thread_id):
while True:
self.lock.acquire()
if len(self.tickets) == 0:
self.lock.release()
break
ticket_index = random.randint(0, len(self.tickets)-1)
ticket = self.tickets[ticket_index]
self.tickets.pop(ticket_index)
self.lock.release()
print("Thread %d bought ticket %d" % (thread_id, ticket))
time.sleep(0.005)
def main():
ticket_system = OnlineTicketSystem()
threads = []
for i in range(4):
thread = threading.Thread(target=ticket_system.buy_ticket, args=(i,))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
if __name__ == '__main__':
main()
```
在程序中,`OnlineTicketSystem` 类表示在线售票系统,它包括了票数和票的列表。当一个线程购买一张票时,它会先获得锁,然后随机选择一张未售出的票进行购买,购买成功后将票从列表中删除,最后释放锁。使用锁可以保证多个线程不会同时购买同一张票,从而保证线程安全。
程序中使用了 `time.sleep(0.005)` 来模拟网络延迟,实际应用中可以根据实际情况调整延迟时间。