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