关于如果不释放锁的问题

关于如果不释放锁的问题

http://img1.sycdn.imooc.com//climg/5f41453d09192d9106700339.jpg

http://img1.sycdn.imooc.com//climg/5f41453d0948645608351099.jpg

这里我没有释放RLock锁,导致第二个线程只运行出了一行,我的理解是:一开始t1线程上了两个锁,等t1线程运行完,释放Lock锁住的资源,但是没有释放RLock锁住的资源,所以t2只能运行出了获取了Lock锁后的代码,不知道我是否理解得对?

我这里有几个一问题:

1、Lock锁和Rock锁是用来锁定资源,是锁定什么资源,是当前代码所需要得资源还是全局的所有资源?

2、Rock锁是得在Lock锁的后面还是没有限制?能不能只用RLock锁

3、    Lock锁里面又上一把锁是为什么,既然第一个把锁其他线程已经进不来了,为什么还要再上一把呢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕美 2020-08-23 14:39:44

同学,你好。

1、同学的理解是对的

2、可以理解为当线程执行时不希望其他线程执行的代码

3、RLock和Lock选择顺序没限制的,可以只用RLock锁

4、RLock是可以给一个线程多次上锁,每个进程间相互竞争的资源不同,所以一个线程会出现锁上不同资源的情况,因此可以加多把锁

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~

  • 提问者 反冲斗士 #1
    那Lock和RLock除了可重复上锁之外是没有其他区别了吗,那这样岂不是RLock锁更加灵活一点?
    2020-08-23 14:47:39
  • 好帮手慕美 回复 提问者 反冲斗士 #2
    同学,你好。Lock和Rlock是两种不同的锁。 Lock:一次只能添加一个锁,添加两次锁,会产生死锁,只有被释放之才会能再次加锁。 RLock:多重锁,已经获得该锁的线程可以继续多次获得该锁,在同一线程中可以被多次acquire。如果使用RLock,那么acquire和release必须成对出现,调用了n次acquire锁请求,则必须调用n次的release才能在线程中释放锁对象。直到一个线程所有的acquire都被release,其他的线程才能获得资源。 RLock会比较灵活一点 祝学习愉快~~~~
    2020-08-23 17:33:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师