本文實(shí)例講述了Python實(shí)現(xiàn)的多線(xiàn)程同步與互斥鎖功能。分享給大家供大家參考,具體如下:
#! /usr/bin/env python#coding=utf-8import threadingimport time'''#1、不加鎖num = 0class MyThread(threading.Thread): def run(self): global num time.sleep(1) #一定要sleep!!! num = num + 1 msg = self.name + ' num is ---- ' + str(num) print msgdef test(): for i in range(10): s = MyThread() #實(shí)例化一個(gè)Thread對(duì)象,每個(gè)Thread對(duì)象代表著一個(gè)線(xiàn)程 s.start() #通過(guò)start()方法,開(kāi)始線(xiàn)程活動(dòng)'''#'''class MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = self.name+' @ '+str(i) print msgdef test(): for i in range(5): t = MyThread() t.start()#''''''#2、加鎖num = 0 #多個(gè)線(xiàn)程共享操作的數(shù)據(jù)mu = threading.Lock() #創(chuàng)建一個(gè)鎖class MyThread(threading.Thread): def run(self): global num time.sleep(1) if mu.acquire(True): #獲取鎖狀態(tài),一個(gè)線(xiàn)程有鎖時(shí),別的線(xiàn)程只能在外面等著 num = num + 1 msg = self.name + ' num is ---- ' + str(num) print msg mu.release() #釋放鎖def test(): for i in range(10): s = MyThread() s.start()'''if __name__ == '__main__': test()
運(yùn)行結(jié)果:

再分別運(yùn)行注釋中的每一部分代碼:
1. 不加鎖:

2. 加鎖:

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注