zoukankan      html  css  js  c++  java
  • 死锁

    死锁状态

    from multiprocessing import Process
    from multiprocessing import Lock,RLock
    
    def func(lock):
        lock.acquire()  # 持有锁
        print('子进程成功拿锁')
        lock.acquire()  # 持有锁
        print('子进程再次成功拿锁')
    
        lock.release()    # 使用release() 释放资源
        lock.release()
        return
    def main():
        l = RLock()         # 使用Lock()会发生死锁,使用RLock()避免死锁
        p = Process(target=func,args=(l,))
        p.start()
        p.join()
    
    if __name__ == '__main__':
        main()
    
    

    比较两个进程认识死锁

    from multiprocessing import Process
    from multiprocessing import Lock,RLock
    import time
    
    def a(l1,l2):
        l1.acquire()   # 持有l1锁
        print('a进程拿到了l1锁')
        time.sleep(3)          # 加时间体现死锁状态
        l2.acquire()   # 持有l2锁
        print('a进程拿到了l2锁')
    
        print('a进程运行中')
        l1.release()
        l2.release()
    
    def b(l1,l2):
        l2.acquire()   # 持有l2锁
        print('b进程拿到了l2锁')
    
        l1.acquire()   # 持有l1锁
        print('b进程拿到了l1锁')
    
        print('b进程运行中')
        l2.release()
        l1.release()
    def main():
        l1 = RLock()         # 使用Lock()会发生死锁,使用RLock()避免死锁
        l2 = RLock()         # 使用Lock()会发生死锁,使用RLock()避免死锁
    
        p1 = Process(target=a,args=(l1,l2))
        p2 = Process(target=b,args=(l1,l2))
        p1.start()
        p2.start()
        p1.join()
        p2.join()
    
    if __name__ == '__main__':
        main()
    
  • 相关阅读:
    PHP 小tip .(@)符号和 php if 赋值
    PHP定义字符串时单引号和双引号的区别
    笔记本 windows 10 安装
    unix_12c_db_init
    教你如何使用php session
    js和 php 介绍
    PHP 简单答题系统
    PHP list() 函数
    PHP集成支付宝快速实现充值功能
    eclipse如何导入PHP的项目
  • 原文地址:https://www.cnblogs.com/xinzaiyuan/p/12452646.html
Copyright © 2011-2022 走看看