Python多執行緒經典問題之乘客做公交車演算法例項

2022-10-04 21:18:29 字數 2848 閱讀 9855

問題描述:

乘客乘坐公交車問題,司機,乘客,售票員協同工作,通過多執行緒模擬三者的工作。

司機:開車,停車

售票員:開啟車門,關閉車門

乘客:上車,下車

用python的event做執行緒同步通訊,**如下:

# *-* coding:gb2312 *-*

import threading

import time

stationname=("車站0","車站1","車站2","車站3","車站4","車站5","車站6")

currentstationindex = -1

eventbusstop = threading.event()

eventcloseddoor = threading.event()

eventopeneddoor = threading.event()

stationcount = len(stationname)

class passenger(threading.thread):

def __init__(self,no,getonstation,getoffstation):

self.no =no

self.getonstation=getonstation

self.getoffstation=getoffstation

threading.thread.__init__(self)

def run(self):

bexit= false

global currentstationindex

global stationcount

balreadygetonstation = false

while not bexit:

eventopeneddoor.wait()

if self.getonstation == currentstationindex and balreadygetonstation == false:

print "乘客%d在%s上車" %(self.no,stationname[currentstationindex])

balreadygetonstation =true

elif self.getoffstation == currentstationindex:

print "乘客%d在%s下車" %(self.no,stationname[currentstationindex])imanq

bexit = true

time.sleep(1)

class driver(threading.thread):

def run(self):

bexit= false

global currentstationindex

global stationcount

while not bexit:

print "司機: 公交車開始行駛....."

time.sleep(5)

currentstationindex += 1

print "司機: 到站 ",stationname[currentstationindex]

eventbusstop.set()

eventcloseddoor.wait()

eventcloseddoor.clear()

if currentstationindex == stationcount-1:

bexit= true

class conductor(threading.thread):

de run(self):

bexit= false

global currentstationindex

global stationcount

while not bexit:

程式設計客棧 eventbusstop.wait()

eventbusstop.clear()

print "售票員開啟車門:%s到了" %(stationname[currentstationindex])

eventopeneddoor.set()

time.sleep(5)

print "售票員關閉車門"

eventopeneddoor.clear()

eventcloseddoor.set()

if currentstationindex == stationcount-1:

bexit = true

def test():

passpool=

p程式設計客棧asspool.append(passenger(0,0,3))

passpool.append(passenger(1,1,3))

passpool.append(passenger(2,2,4))

passpool.append(passenger(3,0,5))

passpool.append(passenger(4,1,3))

passpool.append(passenger(5,2,4))

passpool.append(passenger(6,4,5))

passpool.append(passenger(7,0,2))

passpool.append(passenger(8,1,3))

passpool.append(conductor())

passpool.append(driver())

leng = len(passpool)

for i in range(leng):

passpool[i].start()

if __name__=='__main__':

test()

輸出結果如下:

多執行緒經典問題 賣票問題

package com.llb.賣票.my 需求 某電影院目前正在上映國產大片,共有100張票,而它有3個視窗賣票,請設計乙個程式模擬該電影院賣票 思路 定義乙個類ticket實現runnable介面,裡面定義乙個成員變數 private int ticketcount 100 在ticket類中重...

多執行緒經典問題1 主線程子執行緒交替問題

提出問題 子執行緒迴圈 10 次,接著主線程迴圈 100 次,接著又回到子執行緒迴圈 10 次,接著再回到主線程又迴圈 100 次。如此迴圈50次。分析 這個實際上是非常easy的問題。即子執行緒run,主線程堵塞 子執行緒堵塞,主線程run 可以使執行緒堵塞的方法有非常多,最常見的是sleep與w...

python多執行緒 python多執行緒

通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...