• python



    # 死锁现象是怎么产生的?
    # 多把(互斥/递归)锁 并且在多个线程中 交叉使用
    # fork_lock.acquire()
    # noodle_lock.acquire()
    #
    # fork_lock.release()
    # noodle_lock.release()
    # 如果是互斥锁,出现了死锁现象,最快速的解决方案把所有的互斥锁都改成一把递归锁
    # 程序的效率会降低的
    # 递归锁 效率低 但是解决死锁现象有奇效
    # 互斥锁 效率高 但是多把锁容易出现死锁现象

    # 一把互斥锁就够了
    from threading import Lock,RLock
    # Lock 互斥锁    效率高
    # RLock 递归(recursion)锁  效率相对低
    
    l = Lock()
    l.acquire()
    print('希望被锁住的代码')
    l.release()
    
    rl = RLock()  # 在同一个线程中可以被acquire多次
    rl.acquire()
    print('希望被锁住的代码')
    rl.release()
    
    from threading import Thread,RLock as Lock
    
    def func(i,lock):
        lock.acquire()
        lock.acquire()
        print(i,': start')
        lock.release()
        lock.release()
        print(i, ': end')
    
    lock = Lock()
    for i in range(5):
        Thread(target=func,args=(i,lock)).start()
    

      队列

    import queue   # 线程之间数据安全的容器队列
    from queue import Empty  # 不是内置的错误类型,而是queue模块中的错误
    q = queue.Queue(4)   # fifo 先进先出的队列
    q.get()
    q.put(1)
    q.put(2)
    q.put(3)
    q.put(4)
    print('4 done')
    q.put_nowait(5)
    print('5 done')
    try:
        q.get_nowait()
    except Empty:pass
    print('队列为空,继续其他内容')
    
    from queue import LifoQueue   # last in first out 后进先出 栈
    lq = LifoQueue()
    lq.put(1)
    lq.put(2)
    lq.put(3)
    print(lq.get())
    print(lq.get())
    print(lq.get())
    
    from queue import PriorityQueue  # 优先级队列
    
    priq = PriorityQueue()
    priq.put((2,'alex'))
    priq.put((1,'wusir'))
    priq.put((0,'太白'))
    
    print(priq.get())
    print(priq.get())
    print(priq.get())
    

      



    单例模式

    import time
    class A:
        from threading import Lock
        __instance = None
        lock = Lock()
        def __new__(cls, *args, **kwargs):
            with cls.lock:
                if not cls.__instance:
                    time.sleep(0.000001)   # cpu轮转
                    cls.__instance = super().__new__(cls)
            return cls.__instance
    

      

  • 相关阅读:
    JavaScript event对象
    JavaScript Date对象
    JavasSript函数
    break语句补充:判断当前系统时间与2021年元旦相聚的天数
    JavaScript控制流程
    初识JavaSript-JavaScript主要特点,运用在HTML中的三种用法,基本语法
    一个简单的Java程序
    什么是Java语言规范、API、JDK和IDE
    Vue渐变淡入淡出的轮播图
    js获取窗口滚动条高度、窗口可视范围高度、文档实际内容高度、滚动条离浏览器底部的高度
  • 原文地址:https://www.cnblogs.com/shaohuagu/p/12285291.html
Copyright © 2020-2023  润新知