-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
Description
信号量:最古老的同步原语之一,是一个计数器。
当资源释放时,计数器就睡递增,当申请资源时,计数器就会递减
from threading import BoundedSemaphore
MAX = 3
semaphore = BoundedSemaphore(MAX) ## 最大申请量设为 3
print(semaphore._value) ## 3
semaphore.acquire() ## 申请一次
print(semaphore._value) ## 2
semaphore.acquire()
print(semaphore._value)
print(semaphore.acquire()) ## 申请成功 返回True
print(semaphore._value)
print(semaphore.acquire(False)) # 如果没有资源可以申请(_value的值是0),再次调用acquire方法,会被阻塞
print(semaphore._value)
semaphore.release() # 第一次释放资源
print(semaphore._value)
semaphore.release() # 第二次释放资源
print(semaphore._value)
semaphore.release() # 第三次释放资源
print(semaphore._value)
#semaphore.release() # 第四次释放资源,现在已经没有资源被占用,所以会抛出异常
print(semaphore._value)
信号量是一个计数器,用于记录资源的消耗情况。当资源消耗时递减,当资源释放时递增。可以认为信号量代表资源是否可用。