zoukankan      html  css  js  c++  java
  • 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.避免死锁
    程序在设计时要尽量避免死锁.(银行家算法:算法是解决问题的思路)
    添加超时时间,银行家算法
    '''
  • 相关阅读:
    webapi 导入CSV文件
    webapi 导出CSV文件
    .net 压缩文件夹和解压
    SSH免密码登陆以及穿越跳板机
    hbase shell删除键不听使唤
    百度分享插件wbuid属性无法@指定微博
    iOS safari BUG 总结
    论zeroclipboard的各种爽翻天用法
    Android Studio 使用技巧
    安装第三方包web.py发生的错误
  • 原文地址:https://www.cnblogs.com/zhangboblogs/p/8627577.html
Copyright © 2011-2022 走看看