码迷,mamicode.com
首页 > 其他好文 > 详细

信号量

时间:2019-09-20 21:15:16      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:一个   有一个   release   import   imp   执行   and   name   span   

‘‘‘一 信号量

信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所,但公共厕所容纳的人数是一定的,这便是信号量的大小‘‘‘
from threading import Thread, Semaphore
import threading
import time
def fun():
sm.acquire()
print(‘%s is la‘%threading.current_thread().getName)
time.sleep(3)
sm.release()
if __name__ == ‘__main__‘:
for i in range(50):
sm = Semaphore(5)
t = Thread(target=fun)
t.start()
‘‘‘解析

Semaphore管理一个内置的计数器,
每当调用acquire()时内置计数器-1;
调用release() 时内置计数器+1;
计数器不能小于0;当计数器为0时,acquire()将阻塞线程直到其他线程调用release()。
‘‘‘

from threading import Thread, Semaphore,current_thread
import random, time
sm = Semaphore(3)
def fun():
with sm: #with 打开锁后 无需手动关闭 with会自动关闭
print(‘%s in‘%current_thread().getName())
time.sleep(random.randint(1, 3))


if __name__ == ‘__main__‘:
for i in range(10):
t = Thread(target=fun)
t.start()

信号量

标签:一个   有一个   release   import   imp   执行   and   name   span   

原文地址:https://www.cnblogs.com/yuexijun/p/11559642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!