首页 > 其他 > 详细

死锁与递归锁

时间:2019-02-20 21:10:47      阅读:166      评论:0      收藏:0      [点我收藏+]

递归锁

一个线程拿到锁,counter加1,该线程内又碰到加锁的情况,则counter继续加1,这期间所有其他线程都只能等待,等待该线程释放所有锁,即counter递减到0为止

from threading import Thread, RLock
import time
mutexB = mutexA = RLock()


class Mythread(Thread):

    def run(self):
        self.f1()
        self.f2()


    def f1(self):
        mutexA.acquire()
        print(%s 拿到A锁 % self.name)
        mutexB.acquire()
        print(%s 拿到B锁 % self.name)
        mutexB.release()
        mutexA.release()

    def f2(self):
        mutexB.acquire()
        print(%s 拿到B锁 % self.name)
        time.sleep(1)
        mutexA.acquire()
        print(%s 拿到A锁 % self.name)
        mutexA.release()
        mutexB.release()


if __name__ == __main__:
    for i in range(3):
        t = Mythread()
        t.start()

死锁

from threading import Thread, Lock
import time
mutexA = Lock()
mutexB = Lock()


class Mythread(Thread):

    def run(self):
        self.f1()
        self.f2()


    def f1(self):
        mutexA.acquire()
        print(%s 拿到A锁 % self.name)
        mutexB.acquire()
        print(%s 拿到B锁 % self.name)
        mutexB.release()
        mutexA.release()

    def f2(self):
        mutexB.acquire()
        print(%s 拿到B锁 % self.name)
        time.sleep(1)
        mutexA.acquire()
        print(%s 拿到A锁 % self.name)
        mutexA.release()
        mutexB.release()


if __name__ == __main__:
    for i in range(3):
        t = Mythread()
        t.start()

 

死锁与递归锁

原文:https://www.cnblogs.com/zhengyiqun1992/p/10409059.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!