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()
    
  • 相关阅读:
    【C++】<bits/stdc++.h>
    【网易】被3整除
    【TCP/IP详解】UDP:用户数据报协议
    【网易】牛牛找工作
    【C++】<numeric>中iota函数:递增序列填充

    今天好像找到C语言延迟输出的原因了
    C语言第2
    c语言新知
    glade No package 'libxml-2.0' found
  • 原文地址:https://www.cnblogs.com/xinzaiyuan/p/12452646.html
Copyright © 2011-2022 走看看