多線程中鎖的概念python
多線程中鎖的概念python
好幾個人問我給資源加鎖是怎麼回事,其實並不是給資源加鎖, 而是用鎖去鎖定資源,你可以定義多個鎖, 像下面的代碼, 當你需要獨佔某一資源時,任何一個鎖都可以鎖這個資源
就好比你用不同的鎖都可以把相同的一個門鎖住是一個道理
#coding: utf-8import threading import time counter = 0counter_lock = threading.Lock() #只是定義一個鎖,並不是給資源加鎖,你可以定義多個鎖,像下兩行代碼,當你需要佔用這個資源時,任何一個鎖都可以鎖這個資源counter_lock2 = threading.Lock() counter_lock3 = threading.Lock()#可以使用上邊三個鎖的任何一個來鎖定資源 class MyThread(threading.Thread):#使用類定義thread,繼承threading.Thread def __init__(self,name): threading.Thread.__init__(self) self.name = "Thread-" + str(name) def run(self): #run函數必須實現 global counter,counter_lock #多線程是共用資源的,使用全域變數 time.sleep(1); if counter_lock.acquire(): #當需要獨佔counter資源時,必須先鎖定,這個鎖可以是任意的一個鎖,可以使用上邊定義的3個鎖中的任意一個 counter += 1 print "I am %s, set counter:%s" % (self.name,counter) counter_lock.release() #使用完counter資源必須要將這個鎖開啟,讓其他線程使用 if __name__ == "__main__": for i in xrange(1,101): my_thread = MyThread(i) my_thread.start()