zoukankan      html  css  js  c++  java
  • python3 递归锁解决死锁问题

    解决:典型死锁问题科学家吃面
    code
    import time
    from threading import Thread, RLock
     
     
    fork_lock = noodle_lock = RLock()
     
     
    def eat1(name):
        noodle_lock.acquire()
        print('%s 抢到了面条' % name)
        fork_lock.acquire()
        print('%s 抢到了叉子' % name)
        print('%s 吃面' % name)
        fork_lock.release()
        noodle_lock.release()
     
     
    def eat2(name):
        fork_lock.acquire()
        print('%s 抢到了叉子' % name)
        time.sleep(1)
        noodle_lock.acquire()
        print('%s 抢到了面条' % name)
        print('%s 吃面' % name)
        noodle_lock.release()
        fork_lock.release()
     
     
    for name in ['哪吒', 'nick', 'tank']:
        t1 = Thread(target=eat1, args=(name,))
        t2 = Thread(target=eat2, args=(name,))
        t1.start()
        t2.start()
    outputs 
    macname@MacdeMacBook-Pro py % python3 cccccc.py
    哪吒 抢到了面条
    哪吒 抢到了叉子
    哪吒 吃面
    哪吒 抢到了叉子
    哪吒 抢到了面条
    哪吒 吃面
    nick 抢到了面条
    nick 抢到了叉子
    nick 吃面
    nick 抢到了叉子
    nick 抢到了面条
    nick 吃面
    tank 抢到了面条
    tank 抢到了叉子
    tank 吃面
    tank 抢到了叉子
    tank 抢到了面条
    tank 吃面
    macname@MacdeMacBook-Pro py %
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    JDBC 基本语法总结
    MySQL 基本语法
    mysql学习第三天练习(日期和时间函数)
    mysql学习第三天练习(流程控制函数)
    mysql学习第三天笔记
    mysql学习第二天函数
    mysql学习第一天select
    mysql学习第一天
    Java石头剪刀布小游戏
    Java万年历
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14192161.html
Copyright © 2011-2022 走看看