python多线程死锁和可重入锁的简单示例
对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 52php.cn的小编两巴掌来看看吧!
死锁 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。尽管死锁很少发生,但一旦发生就会造成应用的停止响应。下面看一个死锁的例子:
执行结果:
Thread-1 got resA Thread-1 got resB Thread-1 got resB Thread-1 got resA Thread-2 got resA Thread-2 got resB Thread-2 got resB Thread-2 got resA Thread-3 got resA Thread-3 got resB Thread-3 got resB Thread-3 got resA Thread-5 got resA Thread-5 got resB Thread-5 got resB Thread-4 got resA
此时进程已经死掉。
可重入锁 更简单的死锁情况是一个线程“迭代”请求同一个资源,直接就会造成死锁:
为了支持在同一线程中多次请求同一资源,python提供了“可重入锁”:threading.RLock。RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。上面的例子如果使用RLock代替Lock,则不会发生死锁:
执行结果:
Thread-1 set num to 1 Thread-3 set num to 2 Thread-2 set num to 3 Thread-5 set num to 4 Thread-4 set num to 5 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Python 字符串操作实现代码(截取/替换/查找/分割)
- 如何在开发人员中管理django 1.7中的迁移?
- python 把数据 json格式输出的实例代码
- python – 用于django模型的manage.py sql命令 – Django
- python – 生成Youtube音频的链接
- python – “iter()返回非迭代器”用于动态绑定`next`方法
- 1.1环境的准备(一)之Python解释器的安装
- Python实现计算最小编辑距离
- python – TypeError:’dict’对象在使用dict()时不可调用
- python – Opencv Homography矩阵H和Inverse H转换点没有