• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python多线程编程(五):死锁的形成

Python多线程编程(五):死锁的形成

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了多线程死锁,java多线程死锁,多线程死锁问题,多线程死锁代码,weblogic多线程死锁等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前一篇文章Python:使用threading模块实现多线程编程四[使用Lock互斥锁]我们已经开始涉及到如何使用互斥锁来保护我们的公共资源了,现在考虑下面的情况–

如果有多个公共资源,在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,这会引起什么问题?

死锁概念

所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。
'''
Created on 2012-9-8
 
@author: walfred
@module: thread.TreadTest5
'''  
import threading 
 
counterA = 0 
counterB = 0 
 
mutexA = threading.Lock() 
mutexB = threading.Lock() 
 
class MyThread(threading.Thread): 
    def __init__(self): 
        threading.Thread.__init__(self) 
 
    def run(self): 
        self.fun1() 
        self.fun2() 
 
    def fun1(self): 
        global mutexA, mutexB 
        if mutexA.acquire(): 
            print "I am %s , get res: %s" %(self.name, "ResA") 
 
            if mutexB.acquire(): 
                print "I am %s , get res: %s" %(self.name, "ResB") 
                mutexB.release() 
 
        mutexA.release()  
 
    def fun2(self): 
        global mutexA, mutexB 
        if mutexB.acquire(): 
            print "I am %s , get res: %s" %(self.name, "ResB") 
 
            if mutexA.acquire(): 
                print "I am %s , get res: %s" %(self.name, "ResA") 
                mutexA.release() 
 
        mutexB.release()  
 
if __name__ == "__main__": 
    for i in range(0, 100): 
        my_thread = MyThread() 
        my_thread.start()
</div>

代码中展示了一个线程的两个功能函数分别在获取了一个竞争资源之后再次获取另外的竞争资源,我们看运行结果:
I am Thread-1 , get res: ResA
I am Thread-1 , get res: ResB
I am Thread-2 , get res: ResAI am Thread-1 , get res: ResB
</div>
可以看到,程序已经挂起在那儿了,这种现象我们就称之为”死锁“。

避免死锁

避免死锁主要方法就是:正确有序的分配资源,避免死锁算法中最有代表性的算法是Dijkstra E.W 于1968年提出的银行家算法。

</div>

您可能想查找下面的文章:

  • Python多线程编程(五):死锁的形成

相关文章

  • python+django快速实现文件上传
  • 深入解析Python中的线程同步方法
  • python实现爬虫下载漫画示例
  • Python如何读取MySQL数据库表数据
  • Python中的匿名函数使用简介
  • 树莓派中python获取GY-85九轴模块信息示例
  • tensorboard实现同时显示训练曲线和测试曲线
  • wxPython定时器wx.Timer简单应用实例
  • python统计一个文本中重复行数的方法
  • python使用clear方法清除字典内全部数据实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python嵌套函数使用外部函数变量的方法(Python2和Python3)
    • Python中的map()函数和reduce()函数的用法
    • python实现bitmap数据结构详解
    • Python编程中对文件和存储器的读写示例
    • python中self原理实例分析
    • 在Python中使用SQLite的简单教程
    • TensorFlow dataset.shuffle、batch、repeat的使用详解
    • Python pip安装lxml出错的问题解决办法
    • Python处理json字符串转化为字典的简单实现
    • 在win和Linux系统中python命令行运行的不同

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有