1.添加超时时间:

fromthreading import Thread, Lock

importtime

mutex1= Lock()  # 创建一个互斥锁

mutex2= Lock()  # 创建一个互斥锁

def fun1():

while True:

mutex1.acquire()

print("线程1 锁住了mutex1")

time.sleep(0.1)

result =mutex2.acquire(timeout=1)  # timeout指明acquire等的最长超时时间

# result = mutex2.acquire(False)  # 非阻塞

if result:

# 表示对mutex2成功上锁

print("线程1 锁住了mutex2")

print("线程1 hello")

mutex1.release()

mutex2.release()

break

else:

# 表示对mutex2上锁失败

mutex1.release()  # 将mutex1释放,保证别人能够执行

time.sleep(0.1)

def fun2():

mutex2.acquire()

print("线程2 锁住了mutex2")

time.sleep(0.1)

mutex1.acquire()

print("线程2 锁住了mutex1")

print("线程2 hi")

mutex1.release()

mutex2.release()

2.附录-银行家算法( 不要求,理解就可以

[背景知识]

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

[问题的描述]

一个银行家拥有一定数量的资金,有若干个客户要贷款。每个客户须在一开始就声明他所需贷款的总额。若该客户贷款总额不超过银行家的资金总数,银行家可以接收客户的要求。客户贷款是以每次一个资金单位(如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. SQL Server 2005中解决死锁问题

    SQL Server 2005中解决死锁问题 数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法. 将下面 ...

  2. len计算机语言,python中len的使用方法

    python中len的使用方法 发布时间:2020-09-21 15:04:44 来源:亿速云 阅读:111 作者:Leah python中len的使用方法?针对这个问题,这篇文章详细介绍了相对应的分 ...

  3. python中类方法与实例方法的区别-Python中的对象,方法,类,实例,函数用法分析...

    本文实例分析了Python中的对象,方法,类,实例,函数用法.分享给大家供大家参考.具体分析如下: Python是一个完全面向对象的语言.不仅实例是对象,类,函数,方法也都是对象. class Foo ...

  4. python grpc 并发_在Python中使用gRPC的方法示例【h】

    本文介绍了在Python中使用gRPC的方法示例,分享给大家,具体如下: 使用Protocol Buffers的跨平台RPC系统. 安装 使用 pip gRPC由两个部分构成,grpcio 和 gRP ...

  5. python中列表的sort方法_python中列表的sort方法使用详解

    内容简介:python中列表的sort方法使用详解 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符 ...

  6. python中立方表示_在Python中表示一个对象的方法

    在 Python 中一切都是对象.如果要在 Python 中表示一个对象,除了定义 class 外还有哪些方式呢?我们今天就来盘点一下. 0x00 dict 字典或映射存储 KV 键值对,它对查找.插 ...

  7. python中使用grpc方法示例_在Python中使用gRPC的方法示例

    本文介绍了在Python中使用gRPC的方法示例,分享给大家,具体如下: 使用Protocol Buffers的跨平台RPC系统. 安装 使用 pip pip install grpcio pip i ...

  8. python list sort by,python中List的sort方法指南

    简单记一下python中List的sort方法(或者sorted内建函数)的用法. List的元素可以是各种东西,字符串,字典,自己定义的类等. sorted函数用法如下: sorted(data, ...

  9. 【转】关于python中re模块split方法的使用

    注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于 ...

最新文章

  1. MFCard:易用的信用卡支付集成类库
  2. Sql 语句中 IN 和 EXISTS
  3. 国内一线互联网公司内部面试题库
  4. 五十七、Servlet工程和Tomcat
  5. Android语音录入与邮件发送
  6. tensorflow提取mel谱特征_【脑电信号分类】脑电信号提取PSD功率谱密度特征
  7. WebBrowser控件使用相关
  8. jsp中java代码if_jsp中jstl标签的类似 if - else 语句 的语法
  9. 异步时钟下跨时钟域信号处理
  10. 点云数据处理实现Qt界面常用功能
  11. PLC控制系统设计的基本原则和步骤
  12. SitePoint播客#108:Kevin的最后一场演出
  13. ddr4单颗粒最大_国产DDR4内存颗粒!南亚DDR4颗粒超频测试
  14. 4.23以上UE4 版本HTC-VIVE VR项目打包的注意事项
  15. 基于SpringBoot+thymeleaf+Mysql实现的资产管理系统
  16. 学校电脑的无语配置%¥3
  17. C语言简单的双人小游戏
  18. 计算机主机模型安装顺序,【新手必备】CAD2021最新电脑配置要求附安装步骤详解...
  19. 运筹说 第10期|敲黑板!学习运筹学,怎么能不知道相关的运筹学组织呢?
  20. 20行代码爬取原神角色全图

热门文章

  1. 【HNOI2013】数列
  2. poj 2096 , zoj 3329 , hdu 4035 —— 期望DP
  3. ZJOI2018 Round2 游记
  4. centos6.9系列LNMP环境的安装
  5. 【JZOJ4817】【NOIP2016提高A组五校联考4】square
  6. 理解Android Binder机制原理
  7. Kernel中如何操作CPU及外设寄存器
  8. C语言,使用union了解内存
  9. 暴力字符匹配算法的C语言实现
  10. Linux 5.7 将支持国产 RISC-V 芯片 K210