#-*-coding:utf-8-*- '''若是多個線程共同對某個數據修改,則可能出現不可預料的結果,爲了保證數據的正確性, 須要對多個線程進行同步。 線程同步所使用的的方法: Lock RLock 以上兩個對象,均有acquire和release方法,對於每次只容許一個線程操做的數據能夠 將其放在acquire和release方法之間. Lock:若是一個縣城連續兩次進行acquire操做,若是第一次acquire以後沒有release, 則第二次acquire將掛起線程,致使Lock永遠不會release,致使死鎖。 Rlock:容許一個線程所賜acquire,其內部經過counter變量維護線程acquire次數,而且 在每次acquire操做都有一個release操做對應,全部release操做完成後其他對象才能申請Rlock。 ''' #線程同步的演示 import threading mylock=threading.RLock() num=0 class MyThread(threading.Thread): def __init__(self,name): threading.Thread.__init__(self,name=name) def run(self): global num while True: mylock.acquire() print("%s locked,Number:%d"%(threading.current_thread().name,num)) if num>4: mylock.release() print("%s released,Number:%d"%(threading.current_thread().name,num)) break num+=1 print('%s released,Number:%d'%(threading.current_thread().name,num)) mylock.release() if __name__=="__main__": thread1=MyThread('線程1') thread2=MyThread('線程2') thread1.start() thread2.start()