Skip to content

描述一下什么是信号量,如何使用信号量,请举例说明 #109

@Sogrey

Description

@Sogrey

信号量:最古老的同步原语之一,是一个计数器。

当资源释放时,计数器就睡递增,当申请资源时,计数器就会递减

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)

信号量是一个计数器,用于记录资源的消耗情况。当资源消耗时递减,当资源释放时递增。可以认为信号量代表资源是否可用。

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions