码迷,mamicode.com
首页 > 其他好文 > 详细

死锁与递归锁

时间:2018-05-16 00:27:47      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:img   不为   技术   close   ==   read   spl   print   lap   

死锁导致程序卡死,
互斥锁只能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

 

死锁与递归锁

标签:img   不为   技术   close   ==   read   spl   print   lap   

原文地址:https://www.cnblogs.com/yaya625202/p/9043220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!