【15】Python3 - 理解多线程死锁 以及 解决死锁

死锁问题

  • 通俗的理解:死锁就是多个线程各自已经占据了一些资源,但是同时又需要其他线程占据的互斥资源,才得以继续执行下去。多方都不愿意放弃已有的资源,但是又得不到想要的其他资源。由此达到了一种僵持的状态,使得程序无法继续执行下去。

解决死锁 - 设置锁的等待时间

  • 可以理解为:申请锁的时候,确定等待时间,超过时间,释放自己的资源,让对方先执行完毕。之后再申请。
def func_1():
    print('func_1 starting..............')
	lock_1.acquire(timeout=4) # 设置timeout=4,申请lock_1时,如果空闲,则可以立即申请到lock_1。如果不空闲,则最多等4秒。
    print('func_1 申请了 lock_1.........')
    time.sleep(2)
    print('func_1 等待 lock_2............')

    rst = lock_2.acquire(timeout=2)  # rst表明申请锁是否成功,成功为True
    if rst:
        print('func_1 已经得到了 lock_2')
        lock_2.release()
        print('func_1 释放了 lock_2')
    else:
        print('func_1 注定没有申请到 lock_2')

    lock_1.release()
    print('func_1 释放了 lock_1')

多线程中,生产者消费者问题

    - 一个模型,可以用来搭建消息队列
    - queue是一个用来存放变量的数据结构,特点是先进先出,内部元素排队,可以理解成一个特殊的list
    - 主要是解决数据生成和处理速率不对等的问题。

注:本文是本人根据北京图灵学院的python课程自己整理的笔记哒,转载请注明出处哈~

你可能感兴趣的:(python学习)