博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归锁
阅读量:7135 次
发布时间:2019-06-28

本文共 1718 字,大约阅读时间需要 5 分钟。

一种情况,会造成死锁,,代码如下

import threadingimport timeclass MyThread(threading.Thread):    def actionA(self):        A.acquire()        print(self.name,'gotA',time.ctime())        time.sleep(2)        B.acquire()        print(self.name, 'gotB', time.ctime())        time.sleep(1)        B.release()        A.release()    def actionB(self):        B.acquire()        print(self.name, 'gotB', time.ctime())        time.sleep(2)        A.acquire()        print(self.name, 'gotA', time.ctime())        time.sleep(1)        A.release()        B.release()    def run(self):        self.actionA()        self.actionB()if __name__ == '__main__':    A = threading.Lock()    B = threading.Lock()    L = []    for i in range(5):        t = MyThread()        t.start()        L.append(t)    for i in L:        i.join()    print('ending-------')

 

 

 

用递归锁,可以避免死锁。代码如下

import threadingimport timeclass MyThread(threading.Thread):    def actionA(self):        r_lock.acquire()        print(self.name,'gotA',time.ctime())        time.sleep(2)        r_lock.acquire()        print(self.name, 'gotB', time.ctime())        time.sleep(1)        r_lock.release()        r_lock.release()    def actionB(self):        r_lock.acquire()        print(self.name, 'gotB', time.ctime())        time.sleep(2)        r_lock.acquire()        print(self.name, 'gotA', time.ctime())        time.sleep(1)        r_lock.release()        r_lock.release()    def run(self):        self.actionA()        self.actionB()if __name__ == '__main__':     r_lock = threading.RLock()    L = []    for i in range(5):        t = MyThread()        t.start()        L.append(t)    for i in L:        i.join()    print('ending-------')

 

转载于:https://www.cnblogs.com/lhqlhq/p/8990594.html

你可能感兴趣的文章
PHP168 6.0及以下版本login.php代码执行
查看>>
Java代理(jdk静态代理、动态代理和cglib动态代理)
查看>>
WPF生命周期
查看>>
各大Oj平台介绍
查看>>
hdu1059 dp(多重背包二进制优化)
查看>>
四象限分析法分析你是否适合做管理
查看>>
Create a database in mysql for mac
查看>>
史上最全、JavaScript基础篇
查看>>
Selenium Web 自动化 - Selenium常用API
查看>>
第13天:页面布局实例-博雅主页
查看>>
javascript基础
查看>>
jquery获取、改变元素属性值
查看>>
关闭VirtualBox虚拟机的时钟同步
查看>>
剪贴板(进程通信)
查看>>
删除链表中重复的结点
查看>>
查看你的电脑上.Net Framework版本的方法
查看>>
java编程目录
查看>>
Java读取xml
查看>>
swagger
查看>>
QFT URL
查看>>