zoukankan      html  css  js  c++  java
  • 死锁与递归锁

    死锁导致程序卡死,
    互斥锁只能acquire一次,想acquire必须先release。

    from threading import Thread,Lock
    import time
    mutexA=Lock()
    mutexB=Lock()
    class MyThread(Thread):
        def __init__(self):
            super().__init__()
        def run(self):
            self.f1()
            self.f2()
        def f1(self):
            mutexA.acquire()
            print("%s mutex A" % self.name)
            time.sleep(1)
            mutexB.acquire()
            print("%s mutex B" % self.name)
            mutexA.release()
            mutexB.release()
        def f2(self):
            mutexB.acquire()
            print("%s mutex B" % self.name)
            time.sleep(1)
            mutexA.acquire()
            print("%s mutex A" % self.name)
            mutexA.release()
            mutexB.release()
    if __name__ == "__main__":
        for i in range(10):
            t=MyThread()
            t.start()奥

    递归锁,RLock,可以连续acquire()多次。RLock内部有一个计数器,每acquire()一次计数器加1,只要计数不为0就不能被其他线程抢到。

    from threading import Thread,RLock
    import time
    mutexB=mutexA=RLock()
    class MyThread(Thread):
        def __init__(self):
            super().__init__()
        def run(self):
            self.f1()
            self.f2()
        def f1(self):
            mutexA.acquire()
            print("%s mutex A" % self.name)
            time.sleep(1)
            mutexB.acquire()
            print("%s mutex B" % self.name)
            mutexA.release()
            mutexB.release()
        def f2(self):
            mutexB.acquire()
            print("%s mutex B" % self.name)
            time.sleep(1)
            mutexA.acquire()
            print("%s mutex A" % self.name)
            mutexA.release()
            mutexB.release()
    if __name__ == "__main__":
        for i in range(10):
            t=MyThread()
            t.start()
    View Code
  • 相关阅读:
    1094 纪念品分组
    1803 凌乱的yyy
    1181 数列分段1
    1223排队接水
    1616 疯狂的采药(完全背包问题)
    1305 新二叉树
    1280 尼克的任务
    1020 导弹拦截
    快速学会如何使用Shiro
    mysql 让清空表且自增的id重新从0开始的命令
  • 原文地址:https://www.cnblogs.com/yaya625202/p/9043220.html
Copyright © 2011-2022 走看看