Semphore同步
Semphore,是一种带计数的线程同步机制,当调用release时,增加计算,当acquire时,减少计数,当计数为0时,自动阻塞,等待release被调用。
而在Python中存在两种Semphore,一种就是纯粹的Semphore,还有一种就是BoundedSemaphore。
区别:
Semphore: 在调用release()函数时,不会检查,增加的计数是否超过上限(没有上限,会一直上升)
BoundedSemaphore:在调用release()函数时,会检查,增加的计数是否超过上限,这样就保证了使用的计数
import threading import time semaphore = threading.Semaphore(3) #semaphore = threading.BoundedSemaphore(3) def fun(): print "Thread %s is waiting semphore\n" % threading.currentThread().getName() semaphore.acquire() print "Thread %s get semphore\n" % threading.currentThread().getName() time.sleep(1) print "Thread %s release semphore\n" % threading.currentThread().getName() semaphore.release() if __name__ == "__main__": t1 = threading.Thread(target=fun) t2 = threading.Thread(target=fun) t3 = threading.Thread(target=fun) t4 = threading.Thread(target=fun) t1.start() t2.start() t3.start() t4.start() t1.join() t2.join() t3.join() t4.join() semaphore.release() #这里因为是简单的Semaphore,所以可以再次释放,不会报错,而BoundedSemaphore,则会报错