Python基础——多线程之信号量

信号量可以看成是线程锁的加强版

信号量相当于一个计数器,和RTOS中任务向量表异曲同工,当资源消耗是递减,当资源释放是递增。也就是说acquire消耗资源减一,release释放资源加一。

可以认为信号量代表着资源是否可用。

使用信号量首先要创建BoundedSemaphore类的实例,并通过该类的方法传入信号量的最大值

实例演示了信号对象的创建,获取资源与释放资源:

# ——创建时间:2019.3.2——
# 多线程信号量
from threading import BoundedSemaphore

MAX = 3
# 创建信号量对象,并设置最大值
semaphore = BoundedSemaphore(MAX)
# 输出当前计数器的值
print(semaphore._value)
# 获得资源,计数器减一
semaphore.acquire()
# 输出当前计数器的值
print(semaphore._value)
# 获得资源,计数器减一
semaphore.acquire()
# 输出当前计数器的值
print(semaphore._value)
# 释放资源,计数器加一
semaphore.release()
# 输出当前计数器的值
print(semaphore._value)
# 释放资源,计数器加一
semaphore.release()
# 输出当前计数器的值
print(semaphore._value)

# 如果再次释放资源,则会抛出异常!

结果:

3
2
1
2
3

不能再获取资源时,acquire会返回False;不能再次释放资源时,会抛出异常!

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/88082880
今日推荐