• 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 %
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    ajax请求
    easyui相关问题
    linux解压命令
    angular2 中文学习资料整理
    在angular2服务中注入服务
    Angular 2模板语法
    登录,注册流程(基于token的身份验证)
    Node Js与JavaScript的区别及nodejs优缺点。
    yarn包管理网站
    浅谈Cookie,Session,WebStorage区别,应用场景
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14192161.html
Copyright © 2020-2023  润新知