信号量可以看成是线程锁的加强版
信号量相当于一个计数器,和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;不能再次释放资源时,会抛出异常!
文章来源: https://blog.csdn.net/qq_41895747/article/details/88082880