(1)加深對進程併發執行的理解,認識多進程併發執行的實質。算法
(2)觀察進程共享資源的現象,學習解決進程互斥和同步的方法。併發
本實驗要求用高級語言,啓動多進程併發運行,設計相應代碼,顯示進程無關併發、進程共享變量併發的運行結果。並完成實驗報告。app
3、實驗內容:學習
分別實現如下四種狀況的併發:ui
1.併發的進程之間無關,顯示進程名稱,開始與結束時間。spa
模擬多終端售票狀況,併發的多個終端進程之間共享剩餘票數這個共享變量。設計
2.用全局變量實現。code
3.用進程間共享數據機制實現。blog
4.用進程間共享數據機制和加鎖機制實現。進程
4、實驗過程與結果
#mpml.py #使用Manager from multiprocessing import Manager, Process def main(dic, name): dic['count'] -= 1 print(name, dic) if __name__ == '__main__': mgr = Manager() dic=mgr.dict({'count':100}) p_lst=[] for i in range(50): p =Process(target=main,args=(dic,'進程%s'%i,)) p.start() p_lst.append(p) for i in p_lst: i.join() print('主進程',dic)
#mpml.py #使用Manager,lock from multiprocessing import Manager, Process,Lock def main(dic, lock,name): lock.acquire() dic['count'] -= 1 print(name, dic) lock.release() if __name__ == '__main__': mgr = Manager() lck=Lock() dic=mgr.dict({'count':100}) p_lst=[] for i in range(50): p =Process(target=main,args=(dic,lck,'進程%s'%i,)) p.start() p_lst.append(p) for i in p_lst: i.join() print('主進程',dic)