~玉米糊~
慢慢来,也会很快。 非宁静无以志学,学什么都一样,慢慢打基础,找规律、认真、坚持,其余的交给时间。
随笔 - 117,  文章 - 17,  评论 - 1,  阅读 - 82046

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

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

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from threading import BoundedSemaphore
MAX = 3
 
semaphore = BoundedSemaphore(MAX)
 
print(semaphore._value)
 
semaphore.acquire()
print(semaphore._value)
 
semaphore.acquire()
print(semaphore._value)
 
semaphore.acquire()
print(semaphore._value)
 
# blocking=True时,默认。value为0,没有资源可以申请,再次调用方法会被阻塞
# print(semaphore.acquire(blocking=True))
# print(semaphore._value)
 
print(semaphore.acquire(blocking=False))
print(semaphore._value)
 
semaphore.release()
print(semaphore._value)
 
semaphore.release()
print(semaphore._value)
 
semaphore.release()
print(semaphore._value)
 
# 若没有资源被占用,调用释放,会抛出异常
# semaphore.release()
# print(semaphore._value)
# raise ValueError("Semaphore released too many times")
# ValueError: Semaphore released too many times

  

3
2
1
0
False
0
1
2
3

posted on   yuminhu  阅读(305)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示