Python 線程同步

#-*-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()
    
相關文章
相關標籤/搜索