Python 線程(四):Semphore同步


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

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

區別:

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

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

代碼:

 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,則會報錯

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM