死锁

现实社会中,男女双方都在等待对方先道歉

如果双方都这样固执的等待对方先开口,弄不好,就分搜了

1. 死锁

在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。

尽管死锁很少发生,但一旦发生就会造成应用的停止响应。下面看一个死锁的例子

#coding=utf-8
import threading
import timeclass MyThread1(threading.Thread):def run(self):if mutexA.acquire():print(self.name+'----do1---up----')time.sleep(1)if mutexB.acquire():print(self.name+'----do1---down----')mutexB.release()mutexA.release()class MyThread2(threading.Thread):def run(self):if mutexB.acquire():print(self.name+'----do2---up----')time.sleep(1)if mutexA.acquire():print(self.name+'----do2---down----')mutexA.release()mutexB.release()mutexA = threading.Lock()
mutexB = threading.Lock()if __name__ == '__main__':t1 = MyThread1()t2 = MyThread2()t1.start()t2.start()

此时已经进入到了死锁状态,可以使用ctrl-z退出

2. 说明

3. 避免死锁

  • 程序设计时要尽量避免(银行家算法)
  • 添加超时时间等

附录-银行家算法

[背景知识]

一个银行家如何将一定数目的资金安全地借给若干个客户,使这些客户既能借到钱完成要干的事,同时银行家又能收回全部资金而不至于破产,这就是银行家问题。这个问题同操作系统中资源分配问题十分相似:银行家就像一个操作系统,客户就像运行的进程,银行家的资金就是系统的资源。

[问题的描述]

一个银行家拥有一定数量的资金,有若干个客户要贷款。每个客户须在一开始就声明他所需贷款的总额。若该客户贷款总额不超过银行家的资金总数,银行家可以接收客户的要求。客户贷款是以每次一个资金单位(如1万RMB等)的方式进行的,客户在借满所需的全部单位款额之前可能会等待,但银行家须保证这种等待是有限的,可完成的。

例如:有三个客户C1,C2,C3,向银行家借款,该银行家的资金总额为10个资金单位,其中C1客户要借9各资金单位,C2客户要借3个资金单位,C3客户要借8个资金单位,总计20个资金单位。某一时刻的状态如图所示。

对于a图的状态,按照安全序列的要求,我们选的第一个客户应满足该客户所需的贷款小于等于银行家当前所剩余的钱款,可以看出只有C2客户能被满足:C2客户需1个资金单位,小银行家手中的2个资金单位,于是银行家把1个资金单位借给C2客户,使之完成工作并归还所借的3个资金单位的钱,进入b图。同理,银行家把4个资金单位借给C3客户,使其完成工作,在c图中,只剩一个客户C1,它需7个资金单位,这时银行家有8个资金单位,所以C1也能顺利借到钱并完成工作。最后(见图d)银行家收回全部10个资金单位,保证不赔本。那麽客户序列{C1,C2,C3}就是个安全序列,按照这个序列贷款,银行家才是安全的。否则的话,若在图b状态时,银行家把手中的4个资金单位借给了C1,则出现不安全状态:这时C1,C3均不能完成工作,而银行家手中又没有钱了,系统陷入僵持局面,银行家也不能收回投资。

综上所述,银行家算法是从当前状态出发,逐个按安全序列检查各客户谁能完成其工作,然后假定其完成工作且归还全部贷款,再进而检查下一个能完成工作的客户,......。如果所有客户都能完成工作,则找到一个安全序列,银行家才是安全的。

死锁(python 版)相关推荐

  1. 【Leetcode】刷题之路3(python版)

    回溯专题 1.回溯算法的本质是n叉树的深度优先搜索,同时,需要注意剪枝减少复杂度. 2.回溯算法三部曲 确定参数和返回值 回溯函数终止条件 单层循环 3.回溯法思路 回溯法是一种算法思想,而递归是一种 ...

  2. 统计学习圣经!经典教材《统计学习导论》Python版

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 编辑:张倩,来源:机器之心 <统计学习导论>很经典,但习题用 ...

  3. python数据结构与算法分析_数据结构与算法(Python版)

    为什么研究数据结构与算法 本周带大家进入Python版数据结构与算法的学习.想必大家都听过"算法"一词,算法的学习对编程者来说是至关重要的.首先我们先了解一下为什么要研究数据结构与 ...

  4. 经典教材《统计学习导论》现在有了Python版

    来源:机器之心 本文约1000字,建议阅读5分钟 <统计学习导论>很经典,但用的是 R 语言,没关系,这里有份 Python 版习题实现. 斯坦福经典教材<The Element o ...

  5. 赞!经典教材《统计学习导论》终于有Python版了

    <统计学习导论>是数据科学家中最受欢迎的书籍之一,旨在介绍机器学习算法背后的概念,但这本书的习题都是用R语言实现的,这对于主要使用 Python 语言的机器学习研究者来说不太友好. 为了解 ...

  6. Manning大神牵头,斯坦福开源Python版NLP库Stanza:涵盖66种语言

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 转自:机器之心 对于斯坦福 NLP 库,我们一定不会陌生,但是这一库主要基于 Java ...

  7. 【重磅】Python版《统计学习导论》来啦!附代码链接!

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 <统计学习导论>很经典,但用的是 R 语言,没关系,这里有份 Python 版习题实 ...

  8. 【重磅来袭】斯坦福开源Python版NLP库Stanza:涵盖66种语言!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 对于斯坦福 NLP 库,我们一定不会陌生,但是这一库主要基于 Java.近日,Ch ...

  9. 火星坐标、百度坐标、WGS84坐标转换代码(JS、python版)

    火星坐标.百度坐标.WGS84坐标转换代码(JS.python版) 一.JS版本源码 github:https://github.com/wandergis/coordTransform /*** C ...

最新文章

  1. MLIR Python绑定
  2. 面试官问:你来讲下Netty通信中的粘包、拆包?
  3. pythonpandas函数详解_对pandas中Series的map函数详解
  4. 【CSAPP】三、程序的机器级表示
  5. SortedMap接口
  6. JavaScript中delete运算符
  7. docker容器内无法下载到alpine的资源,报错network error (check Internet connection and firewall)
  8. wordpress 插件_如何为您的Web应用程序创建WordPress插件
  9. java string对象名称_java中常见对象——String
  10. 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny) 【转】
  11. windows 2008 R2 如何更新SID
  12. 麦迪逊大学计算机科学咋样,威斯康星大学麦迪逊分校
  13. VS2013 应用程序无法正常启动0xc0150002
  14. 找不到项目 该项不在计算机中,Win7提示“找不到该项目”怎么办 Win7提示“找不到该项目”解决方法...
  15. 施一公 谈英文论文写作
  16. Ajax----跨域请求
  17. gta5在线模式服务器暂停使用,R星官网放出《GTAOL》停服公告,12月16日正式关闭线上服务器!...
  18. 分享一个神器!16倍速看视频,闪瞎了我的狗眼!
  19. 很不错的两款Bootstrap Icon图标选择组件
  20. AirDisk产品Q3C两大功能

热门文章

  1. 趣图:产品还没测试直接投入生产时
  2. SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法
  3. oracle 对象管理 07_PLSQL基础与异常
  4. [置顶]别羡慕别人的舒服,静下心来坚持奋斗!!!
  5. MySQL sql_model问题研究
  6. webpack2 实践系列(二)— entry 和 output
  7. SpringMVC介绍之约定优于配置
  8. 交换机两个链路相连一些设置
  9. 读书笔记2013第5本:《拖延心理学》
  10. CentOS下如何配置LAMP环境