• 14.死锁及死锁的解决方法


    #1.死锁
    '''
    在线程间共享多个资源的时候,如果两个线程分别占有一部分资源,并且同时等待对方资源时,就会造成死锁
    尽管死锁很少发生,但一旦发生就会造成应用的停止响应
    '''
    #2.例子:有两个人分别做"西兰花"和"红烧肉",每个人都需要"锅"和"铲子"
    import threading,time
    class XiLanHua_Thread(threading.Thread):
        def run(self):
            mutexFlag_C = mutex_C.acquire(True)
            if mutexFlag_C:
                print(self.name + "拿到了铲子")
                # 表示使用资源消耗的时间
                # time.sleep(1)
                mutexFlag_G = mutex_G.acquire(True)
                if mutexFlag_G:
                    print(self.name + "拿到了锅")
                    mutex_G.release()
                mutex_C.release()
                print(self.name + "使用完成了")
    
    class HongShaoRou_Thread(threading.Thread):
        def run(self):
    
            mutexFlag_G = mutex_G.acquire(True)
            if mutexFlag_G:
                print(self.name + "拿到了锅")
                #表示使用资源消耗的时间
                # time.sleep(1)
                mutexFlag_C = mutex_C.acquire(True)
                if mutexFlag_C:
                    print(self.name + "拿到了铲子")
                    mutex_C.release()
                mutex_G.release()
                print(self.name + "使用完成了")
    
    if __name__ == "__main__":
        mutex_C = threading.Lock()
        mutex_G = threading.Lock()
    
        t1 = XiLanHua_Thread()
        t2 = HongShaoRou_Thread()
        t1.start()
        t2.start()
    '''
    3.避免死锁
    程序在设计时要尽量避免死锁.(银行家算法:算法是解决问题的思路)
    添加超时时间,银行家算法
    '''
  • 相关阅读:
    7.15的一些小练习
    关于turtle画蟒蛇小实例
    Javascript我学之四作用域
    Javascript我学之三函数的参数
    Javascript我学之二函数定义
    JavaScript我学之一变量类型
    叩响C#之门-继承
    《C#高级编程》之泛型--1创建泛型类
    VB6 仿.netWinfrom控件 Anchor属性类
    新写了XmlFile类
  • 原文地址:https://www.cnblogs.com/zhangboblogs/p/8627577.html
Copyright © 2020-2023  润新知