Python 線程(四):Semphore同步

Semphore,是一種帶計數的線程同步機制,當調用release時,增長計算,當acquire時,減小計數,當計數爲0時,自動阻塞,等待release被調用。函數

而在Python中存在兩種Semphore,一種就是純粹的Semphore,還有一種就是BoundedSemaphore。ui

區別:spa

Semphore:  在調用release()函數時,不會檢查,增長的計數是否超過上限(沒有上限,會一直上升)線程

BoundedSemaphore:在調用release()函數時,會檢查,增長的計數是否超過上限,這樣就保證了使用的計數code

代碼:blog

 1 import threading
 2 import time
 3 
 4 semaphore = threading.Semaphore(3)
 5 #semaphore = threading.BoundedSemaphore(3)
 6 
 7 def fun():
 8     print "Thread %s is waiting semphore\n" % threading.currentThread().getName()
 9     semaphore.acquire()
10     print "Thread %s get semphore\n" % threading.currentThread().getName()
11     time.sleep(1)
12     print "Thread %s release semphore\n" % threading.currentThread().getName()
13     semaphore.release()
14 
15 
16 if __name__ == "__main__":
17     t1 = threading.Thread(target=fun)
18     t2 = threading.Thread(target=fun)
19     t3 = threading.Thread(target=fun)
20     t4 = threading.Thread(target=fun)
21 
22     t1.start()
23     t2.start()
24     t3.start()
25     t4.start()
26 
27     t1.join()
28     t2.join()
29     t3.join()
30     t4.join()
31 
32     semaphore.release()  #這裏由於是簡單的Semaphore,因此能夠再次釋放,不會報錯,而BoundedSemaphore,則會報錯
相關文章
相關標籤/搜索