【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种方式】

 

【加群交流】



posted @ 2020-09-06 18:27  AI菌  阅读(215)  评论(0编辑  收藏  举报