zoukankan      html  css  js  c++  java
  • 【Python高级编程017 ● 多任务编程 ● 死锁】


    ---------Python基础编程---------

    Author : AI菌


    【内容讲解】

    1.死锁的概念: 一直等待对方释放锁的情景就是死锁。
    2.死锁的危害:死锁一旦产生就会造成应用程序的停止响应,应用程序无法再继续往下执行了。
    3.解决死锁的方法:使用互斥锁的时候需要注意死锁的问题,要在合适的地方注意释放锁。

    【代码演示】

    """
    1.死锁的概念: 一直等待对方释放锁的情景就是死锁。
    2.死锁的危害:死锁一旦产生就会造成应用程序的停止响应,应用程序无法再继续往下执行了。
    3.解决死锁的方法:使用互斥锁的时候需要注意死锁的问题,要在合适的地方注意释放锁。
    """
    
    import threading
    
    # 创建互斥锁
    lock = threading.Lock()
    
    
    # 保证同一时刻只有一个线程根据下标去取值
    def get_value(index):
        # 取值之前先上锁
        lock.acquire()
        my_list = [0, 1, 2]
    
        # 判断下标是否越界
        if index >= len(my_list):
            print("下标越界:", index)
            # 下标越界不能取值,也需要把锁释放,保证后面的线程可以再次取值
            # 如果线程一直不释放锁,其他线程就一直等待,形成死锁,程序就无法往下继续执行
            lock.release()
            # 如果下标越界,直接结束函数get_value
            return
    
        # 根据下标获取值
        result = my_list[index]
        print(result)
    
        # 取值完成需要释放锁
        lock.release()
    
    
    if __name__ == '__main__':
        # 创建很多线程,同时执行某个任务
        for i in range(5):
            # 创建子线程
            sub_thread = threading.Thread(target=get_value, args=(i,))
            # 启动线程执行任务
            sub_thread.start()

    【运行结果】

    0
    1
    2
    下标越界: 3
    下标越界: 4

    【往期精彩】

    ▷【Python基础编程196 ● 读取文件的4种方式】
    ▷【Python基础编程197 ● 读取文件的4种方式】
    ▷【Python基础编程198 ● 读取文件的4种方式】
    ▷【Python基础编程199 ● Python怎么读/写很大的文件】
    ▷【Python基础编程200 ● 读取文件的4种方式】
    ▷【Python基础编程201 ● 读取文件的4种方式】
    ▷【Python基础编程202 ● 读取文件的4种方式】
    ▷【Python基础编程203 ● 读取文件的4种方式】

    【加群交流】



  • 相关阅读:
    与生命晒跑
    关于你有一条未读短信的静态单页
    【微收藏】来自Twitter的自动文字补齐jQuery插件
    chrome 插件个人使用推介
    vscode中检测代码中的空白行并去除的方法
    FTP文件乱码导致的无法删除
    git操作遇到的几个问题
    一个srand、rand结果相同的问题
    【verilog】单周期MIPS CPU设计
    【verilog】多周期MIPS CPU设计
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/13622657.html
Copyright © 2011-2022 走看看