python-死锁和递归锁(可重复锁)
2022/5/12 17:27:27
本文主要是介绍python-死锁和递归锁(可重复锁),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、什么是死锁
【1】两个线程同时占有某个资源,并且同时等待对方的资源,就会造成死锁
# -*- coding:utf-8 -*- # __author__: # 2022/5/12 import threading,time #A向B要钱,B向A要货物,A要让B先给,B让A先给,两者造成死锁 # 创建锁A lockA = threading.Lock() # 创建锁B lockB = threading.Lock() def A(): # 锁住 lockA.acquire() print('先给我钱') time.sleep(1) # 部分资源被B锁住 lockB.acquire() print('先给我货物') time.sleep(1) # 解锁 lockB.release() lockA.release() def B(): # 锁住 lockB.acquire() print('先给我货物') time.sleep(1) #A占有部分资源 # 部分资源被B锁住 lockA.acquire() print('先给我钱') time.sleep(1) # 创建两个线程 t1 = threading.Thread(target=A) t2 = threading.Thread(target=B) # 启动线程 t1.start() t2.start() # 输出: # 先给我钱 # 先给我货物
【2】递归锁:内置lock和count
# 递归锁内有lock和count计数器,上锁1次count+1,解锁1次count-1,count必须>=0
# 递归锁在一定程度上安全性比同步锁要低,所以一般在读的时候用递归锁,写的时候用同步锁,提升效率
# -*- coding:utf-8 -*- # __author__:pansy # 2022/5/12 # 递归锁内有lock和count计数器,上锁1次count+1,解锁1次count-1,count必须>=0 # 递归锁在一定程度上安全性比同步锁要低,所以一般在读的时候用递归锁,写的时候用同步锁,提升效率 # 创建递归锁 import threading,time rLock = threading.RLock() def A(): # 锁住 rLock.acquire() # count+1 print('先给我钱') time.sleep(1) # 部分资源被B锁住 rLock.acquire() # count+1 print('先给我货物') time.sleep(1) # 解锁 rLock.release() # count-1 rLock.release() # count-1 def B(): # 锁住 rLock.acquire() print('先给我货物') time.sleep(1) #A占有部分资源 # 部分资源被B锁住 rLock.acquire() print('先给我钱') time.sleep(1) # 创建两个线程 t1 = threading.Thread(target=A) t2 = threading.Thread(target=B) # 启动线程 t1.start() t2.start()
这篇关于python-死锁和递归锁(可重复锁)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享