zoukankan      html  css  js  c++  java
  • 信号量 Semaphore

    '''一 信号量

    信号量也是一把锁,可以指定信号量为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()
  • 相关阅读:
    创建百度地图实例
    IntelliJ IDEA使用(1)——IDEA配置JDK
    IntelliJ IDEA使用(2)——IDEA配置Tomcat
    怎样使用 GitHub?
    IntelliJ IDEA使用(3)——IDEA连接Git
    AS3.0杂记——Dictionary、Object与Array
    AIR文件操作:使用文件对象操作文件和目录 .
    As3.0 TextField
    关于乘机
    Html 嵌入 swf
  • 原文地址:https://www.cnblogs.com/yuexijun/p/11559642.html
Copyright © 2011-2022 走看看