首页 > 编程语言 > 详细

python 并发编程 多线程 信号量

时间:2019-07-06 17:13:36      阅读:117      评论:0      收藏:0      [点我收藏+]

 

 

一 信号量

信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行

如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所,但公共厕所容纳的人数是一定的,这便是信号量的大小

 

from threading import Thread
from threading import Semaphore
from threading import current_thread
import time

sm = Semaphore(3)

def task():
    sm.acquire()
    print("%s in" %current_thread().getName())
    time.sleep(3)
    sm.release()
    print()

if __name__ == "__main__":
    for i in range(1,11):
        t = Thread(target=task)
        t.start()

‘‘‘
Thread-1 in
Thread-2 in
Thread-3 in


Thread-5 in

Thread-6 in
Thread-4 in



Thread-7 in
Thread-8 in
Thread-9 in


Thread-10 in

‘‘‘

 

设置坑3个,先是线程1-3抢到坑,然后释放了,其他线程开始抢

 

 

解析

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

 

python 并发编程 多线程 信号量

原文:https://www.cnblogs.com/mingerlcm/p/11067440.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!