位置: 编程技术 - 正文

举例讲解Python中的死锁、可重入锁和互斥锁(python怎么理解)

编辑:rootadmin

推荐整理分享举例讲解Python中的死锁、可重入锁和互斥锁(python怎么理解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python中;的作用,python中deque,列举出python的5个数据类型,python的cumprod,python中deque,python中;的作用,python 举例,python 举例,内容如对您有帮助,希望把文章链接给更多的朋友!

一、死锁

简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况。

1、迭代死锁

该情况是一个线程“迭代”请求同一个资源,直接就会造成死锁:

上例中,在run函数的if判断中第一次请求资源,请求后还未 release ,再次acquire,最终无法释放,造成死锁。这里例子中通过将print下面的两行注释掉就可以正常执行了 ,除此之外也可以通过可重入锁解决,后面会提到。

2、互相调用死锁

上例中的死锁是在同一个def函数内多次调用造成的,另一种情况是两个函数中都会调用相同的资源,互相等待对方结束的情况。如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。

这个死锁的示例稍微有点复杂。具体可以理下。

二、可重入锁

为了支持在同一线程中多次请求同一资源,python提供了“可重入锁”:threading.RLock。RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。这里以例1为例,如果使用RLock代替Lock,则不会发生死锁:

举例讲解Python中的死锁、可重入锁和互斥锁(python怎么理解)

和上面那个例子的不同之处在于threading.Lock()换成了threading.RLock() 。

三、互斥锁python threading模块有两类锁:互斥锁(threading.Lock )和可重用锁(threading.RLock)。两者的用法基本相同,具体如下:

RLock的用法是将threading.Lock()修改为threading.RLock()。便于理解,先来段代码:

这里执行的结果和想想的不同,结果如下:

为什么结果都是呢?关键在于global 行和 time.sleep行。

1、由于x是一个全局变量,所以每次循环后 x 的值都是执行后的结果值;

2、由于该代码是多线程的操作,所以在sleep 等待的时候,之前已经执行完成的线程会在这等待,而后续的进程在等待的5秒这段时间也执行完成 ,等待print。同样由于global 的原理,x被重新斌值。所以打印出的结果全是 ;

3、便于理解,可以尝试将sleep等注释,你再看下结果,就会发现有不同。

在实际应用中,如抓取程序等,也会出现类似于sleep等待的情况。在前后调用有顺序或打印有输出的时候,就会现并发竞争,造成结果或输出紊乱。这里就引入了锁的概念,上面的代码修改下,如下:

执行的结果如下:

加锁的结果会造成阻塞,而且会造成开锁大。会根据顺序由并发的多线程按顺序输出,如果后面的线程执行过快,需要等待前面的进程结束后其才能结束 --- 写的貌似有点像队列的概念了 ,不过在加锁的很多场景下确实可以通过队列去解决。

python 的列表遍历删除实现代码 python的列表list可以用for循环进行遍历,实际开发中发现一个问题,就是遍历的时候删除会出错,例如l=[1,2,3,4]foriinl:ifi!=4:l.remove(i)printl这几句话本来意图

Windows下为Python安装Matplotlib模块 这玩意反反复复弄了一晚上,这里详细叙述下如何安装,肯定会对大家有所帮助。首先默认大家都装了Python,这个从官网下基本不会有任何难度。(1)S

使用Python导出Excel图表以及导出为图片的方法 本篇讲下如何使用纯python代码将excel中的图表导出为图片。这里需要使用的模块有wincom、pythoncom模块。网上经查询有人已经写好的模块pyxlchart,具体代

标签: python怎么理解

本文链接地址:https://www.jiuchutong.com/biancheng/378556.html 转载请保留说明!

上一篇:用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动(python编写飞机大战)

下一篇:python 的列表遍历删除实现代码(python中列表的遍历)

  • 销售软件系统退货怎么退
  • 产权转移书据印花税包括什么
  • 财务管理考试时间多长
  • 公司名称变更期间可以投标吗
  • 2020年国税申报截止到什么时候
  • 自然人税收系统生产经营怎么申报
  • 法院判决书能做证据使用吗
  • 物流辅助服务属于什么项目
  • 淘宝客佣金代扣款是什么意思
  • 发票逾期未认证个人要承担责任吗
  • 一般纳税人开培训发票税率是多少
  • 施工费可以开13个点吗
  • 利息收入要不要交增值税?
  • 购买税控系统专用设备
  • 出口发票认证相符要多久
  • 增值税代扣代缴抵扣
  • 小微企业减半征收印花税代码
  • 会计里面红字冲销是什么意思
  • 收到雇主责任险发票计入什么科目
  • 政府奖励金额是否要交二次税呢
  • 购买现金支票的扣费方式
  • 公司邀请外国人来华邀请函模板
  • 出口退税是几个点
  • bios如何解除电脑密码
  • windows10无线网卡怎么连接无线网
  • 最新早上好图片大全集
  • 处理废料会计分录
  • 销售产品出去 怎么做科目
  • win10开发工具在哪
  • 返利给客户的账务处理
  • sixtypopsix.exe - sixtypopsix是什么进程 有什么用
  • 非盈利组织稳定吗
  • 登记会计账簿的注意事项
  • 提示内存不足
  • php连接数据库代码是什么
  • 股票金融资产被称为
  • form表单使用
  • 商业连锁企业有哪些
  • 企业缴纳的所得税应以净利润为基础
  • 建筑 营改增
  • swiper.js常用功能
  • phalcon model在插入或更新时会自动验证非空字段的解决办法
  • 大学生web前端期刊有哪些
  • php php
  • fold命令 限制文件列宽
  • 固定资产清理属于非流动资产吗
  • 所得税申报怎么弥补以前年度亏损
  • 税务三流一致是什么意思
  • 注册机械加工公司需要什么
  • Bootstrap table 控制表格高度固定(行高固定)并且不受数据量影响
  • 无发票的费用该谁承担
  • 筹建养老院国家有哪些优惠政策?
  • 工业企业增值税税负多少合理
  • 门诊报销是怎么报的
  • 计提城建税的会计分录怎么写
  • 销售边角料的增值税率
  • 进项税已认证未缴纳
  • 房地产资质代办需要多少钱
  • 售楼部大楼
  • 自己开发建造的房屋
  • 税控抵税怎么做分录
  • 公交车ic卡网上充值
  • 免抵税额什么意思
  • 股东预分配利润后如何返还
  • 预提费用如何预提
  • 咨询服务费开票税率
  • 旅游饮食服务企业的特点包括
  • sqlserver附加数据库时出错,请单击消息中的超链接
  • fedora改密码
  • linux配置ftp服务
  • qttask.exe是什么进程?qttask.exe是不是病毒?
  • Linux系统下以模块方式安装卸载文件系统
  • win7无法正常关机
  • 新装win8系统卡顿严重,虚拟内存为0
  • perl调试
  • 调度器在操作系统中的作用
  • unity小例子
  • node.js nvm
  • 海南省地税官网
  • 深圳布吉下水径旧改
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设