zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    spring cloud-之入门技术选型的抉择
    jvm系列之-gc日志查看
    jvm系列之-参数设置
    Code completion has become quite slow under Delphi7
    Python4Delphi注意事项
    SHFileOperation删除文件夹
    开漏输出,推挽输出
    DxGrexpt中的ExcelFormat (BIFF)
    通过exe名字查询句柄,String与ShortString转换函数分析
    Netstat判断商品是否正在使用
  • 原文地址:https://www.cnblogs.com/shaohuagu/p/12285291.html
Copyright © 2011-2022 走看看