首页 > 编程语言 > 详细

多进程与多线程补充

时间:2020-04-27 23:33:58      阅读:115      评论:0      收藏:0      [点我收藏+]

一、死锁与递归锁

  1、死锁:当多个进程(线程)交叉争夺多个互斥锁时会产生死锁的现象造成程序的阻塞。

import threading
import time

mutex_a = threading.Lock()
mutex_b = threading.Lock()


def task(name):
    mutex_a.acquire()  # 第一名抢到a锁---第二名抢到a锁,此时第一名抢到b锁
    print({}获得了a锁.format(name))
    mutex_b.acquire()  # 第一名抢到b锁---第二名拿着a锁尝试抢b锁,此时第一名拿着b锁尝试抢a锁,此处开始阻塞
    print({}获得了b锁.format(name))
    mutex_b.release()  # 第一名释放b锁
    print({}释放了b锁.format(name))
    mutex_a.release()  # 第一名释放a锁
    print({}释放了a锁.format(name))
    mutex_b.acquire()  # 第一名抢到b锁
    print({}获得了b锁.format(name))
    time.sleep(3)
    mutex_a.acquire()  # 第一名拿着b锁尝试抢a锁
    print({}获得了a锁.format(name))
    mutex_a.release()
    print({}释放了a锁.format(name))
    mutex_b.release()
    print({}释放了b锁.format(name))


if __name__ == __main__:
    for n_name in range(1, 10):
        t = threading.Thread(target=task, args=(n_name,))
        t.start()
‘‘‘
阻塞结果为:
1获得了a锁
1获得了b锁
1释放了b锁
1释放了a锁
1获得了b锁
2获得了a锁
......
‘‘‘

 

多进程与多线程补充

原文:https://www.cnblogs.com/caoyu080202201/p/12790726.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!