一、递归锁

# Lock :互斥锁   效率高
# RLock :递归(recursion)锁 效率相对低 在同一个线程中可以被acquire多次,如果想要释放锁,acquire多少次就要release多少次 from threading import RLock def func(i,rlock):
rlock .acquire()
rlock .acquire()
print(i,': start')
rlock .release()
rlock .release()
print(i, ': end') rlock = RLock ()
for i in range(5):
Thread(target=func,args=(i,rlock)).start()

二、死锁

# import time
# from threading import Thread,Lock,RLock
# fork_lock = noodle_lock = RLock()
# # fork_lock = RLock()
#
# def eat(name):
# noodle_lock.acquire()
# print(name,'抢到面了')
# fork_lock.acquire()
# print(name, '抢到叉子了')
# print(name,'吃面')
# time.sleep(0.1)
# fork_lock.release()
# print(name, '放下叉子了')
# noodle_lock.release()
# print(name, '放下面了')
#
# def eat2(name):
# fork_lock.acquire()
# print(name, '抢到叉子了')
# noodle_lock.acquire()
# print(name,'抢到面了')
# print(name,'吃面')
# noodle_lock.release()
# print(name, '放下面了')
# fork_lock.release()
# print(name, '放下叉子了')
#
# Thread(target=eat,args=('alex',)).start()
# Thread(target=eat2,args=('wusir',)).start()
# Thread(target=eat,args=('taibai',)).start()
# Thread(target=eat2,args=('大壮',)).start() import time
from threading import Thread,Lock,RLock
fork_noodle_lock = Lock()
# fork_lock = RLock() def eat(name):
fork_noodle_lock.acquire()
print(name,'抢到面了')
print(name, '抢到叉子了')
print(name,'吃面')
time.sleep(0.1)
fork_noodle_lock.release()
print(name, '放下叉子了')
print(name, '放下面了') def eat2(name):
fork_noodle_lock.acquire()
print(name, '抢到叉子了')
print(name,'抢到面了')
print(name,'吃面')
fork_noodle_lock.release()
print(name, '放下面了')
print(name, '放下叉子了') Thread(target=eat,args=('a',)).start()
Thread(target=eat2,args=('b',)).start()
Thread(target=eat,args=('c',)).start()
Thread(target=eat2,args=('d',)).start() #
# 1:死锁现象是怎么产生的?
# 多把(互斥/递归)锁 并且在多个线程中 交叉使用
# fork_lock.acquire()
# noodle_lock.acquire()
#
# fork_lock.release()
# noodle_lock.release()
# 2:如果是互斥锁,出现了死锁现象,最快速的解决方案把所有的互斥锁都改成一把递归锁,但是程序的效率会降低的
# 3:递归锁 效率低 但是解决死锁现象有奇效
# 4:互斥锁 效率高 但是多把锁容易出现死锁现象
# 5:一把互斥锁就够了

递归锁和死锁(Python)的更多相关文章

  1. python线程死锁与递归锁

    死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待 ...

  2. python开发线程:死锁和递归锁&信号量&定时器&线程queue&事件evevt

    一 死锁现象与递归锁 进程也有死锁与递归锁,在进程那里忘记说了,放到这里一切说了额 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将 ...

  3. python并发编程之多线程2---(死锁与递归锁,信号量等)

    一.死锁现象与递归锁 进程也是有死锁的 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用, 它们都将无法推进下去.此时称系统处于死锁状态或系统 ...

  4. python并发编程之多线程2死锁与递归锁,信号量等

    一.死锁现象与递归锁 进程也是有死锁的 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用, 这些永远在互相等待的进程称为死锁进程 如下就是死锁 ...

  5. Python 36 死锁现象和递归锁、信号量、Event事件、线程queue

    一:死锁现象和递归锁 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远 ...

  6. Python之路(第四十四篇)线程同步锁、死锁、递归锁、信号量

    在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十分棘手的问题,也是使用多线程下面临的问题,如果处理不好,会带来较严重的后果,使用python多线程中提供Lock ...

  7. python并发编程之线程(二):死锁和递归锁&信号量&定时器&线程queue&事件evevt

    一 死锁现象与递归锁 进程也有死锁与递归锁,在进程那里忘记说了,放到这里一切说了额 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将 ...

  8. python 并发编程 多线程 死锁现象与递归锁

    一 死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等 ...

  9. Python之网路编程之死锁,递归锁,信号量,Event事件,线程Queue

    一.死锁现象与递归锁 进程也是有死锁的 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用, 它们都将无法推进下去.此时称系统处于死锁状态或系统 ...

  10. python并发编程之线程(创建线程,锁(死锁现象,递归锁),GIL锁)

    什么是线程 进程:资源分配单位 线程:cpu执行单位(实体),每一个py文件中就是一个进程,一个进程中至少有一个线程 线程的两种创建方式: 一 from threading import Thread ...

随机推荐

  1. AtCoder Beginner Contest 162 C~F

    比赛链接:Here AB水题, C - Sum of gcd of Tuples (Easy) 题意:\(\sum_{a=1}^{K} \sum_{b=1}^{K} \sum_{c=1}^{K} g ...

  2. Codeforces Round #663 (Div. 2) (A~C题,C题 Good)

    比赛链接:Here 1391A. Suborrays 简单构造题, 把 \(n\) 放最前面,接着补 \(1\) ~ \(n - 1\) 即可 1391B. Fix You \((1,1)\) -&g ...

  3. 【每日一题】21.边的染色 (DFS连通图 + 思维)

    补题链接:Here 思维不够,看到这种陌生的题目无从下手. 这题应该做过一次的人会觉得它其实并不难. 主要思想:把边权->点权. 这样做的好处是,无论你怎么分配点权,在环内的异或值一定为 \(0 ...

  4. Android 多语言动态更新方案探索

    本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/jG8rAjQ8QAOmViiQ33SuEg作者:陈龙 最近做的项目需要支持几十种语言,很多小 ...

  5. mysql备份恢复总结

    mysqldump备份注:例子中的语句都是在mysql5.6下执行------------------基础------------------------一.修改my.cnf文件 vi /etc/my ...

  6. 如何使用chatgpt编写代码

    功能列举 回答编程问题 我想让你充当 Stackoverflow 的帖子.我将提出与编程有关的问题,你将回答答案是什么.我希望你只回答给定的答案,在没有足够的细节时写出解释.当我需要用英语告诉你一些事 ...

  7. VUEX 使用学习四 : action

    转载请注明出处: action 用于处理异步任务:action,可以操作任意的异步操作,类似于mutations,但是是替代mutations来进行异步操作的.首先mutations中必须是同步方法, ...

  8. 两个List< string>比较是否相同的N种方法,你用过哪种?

    今天在一技术群看一群大佬讨论: 有没有优雅的写法,比较两个List集合中的元素是不是完全一致... 站长最近也无聊,通过群里的聊天记录和给出的参考链接,简单做做总结,万一后面大家能用上呢? 我们做简单 ...

  9. Vue-自定义icon实现

    在项目中引入了element-ui之后,发现其内置的icon有限,无法满足项目的需求,因此需自定义icon来实现需求. 在vue项目的components下新建SvgIcon目录,在SvgIcon目录 ...

  10. 远程复制文件-scp