zoukankan      html  css  js  c++  java
  • python 并发编程 多线程 信号量

    一 信号量

    信号量也是一把锁,可以指定信号量为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()。
  • 相关阅读:
    工作中碰到的小问题记录
    MySQL之路 ——1、安装跳坑
    C# 构造函数
    C# 操作文件类,文件夹存在判断,创建,文件内容读写。
    你为什么(不)用存储过程?
    C#基础巩固之基础类型
    mysql存储过程中使用事务
    Redis 安装
    Maven 国内映像
    mysql存储过程详解
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/11067440.html
Copyright © 2011-2022 走看看