rlock多重锁

rlock多重锁

老师,rlock是可以上多重锁,上锁的目的是为了在进行一个线程的时候防止别的线程进来执行,上一个锁rlock就可以实现这样的方法,我用lock也可以,用rlock也可以。那为什么要上多重锁呢,还要多次解锁。有没有什么例子

正在回答

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

1回答

同学,你好。rlock是可以给一个线程多次上锁,由于每个进程间相互竞争的资源不同,所以一个线程会出现上锁不同资源的情况,这样就只在相互竞争的资源中上锁,而不是一下子把一个线程的所有资源都上锁,提高了资源的利用率。例如当a资源的锁被释放,b资源还存在竞争关系时,a资源就可以供其他线程利用了,如:

import threading

# 获得一把锁
your_lock = threading.RLock()

def fn():

    your_lock.acquire()
    a = 1+1
    print(a)
    your_lock.acquire()
    b = 2+2
    print(b)
    your_lock.release()
    your_lock.release()

if __name__ == '__main__':
    fn()
    fn()

如果解决了你的疑惑,请采纳,祝学习愉快~ 


  • 玖__ 提问者 #1
    def fn(): your_lock.acquire() a = 1+1 print(a) your_lock.release() your_lock.acquire() b = 2+2 print(b) your_lock.release() 老师,我把一个 your_lock.release()提到了前面,和不提到前面他的算法是一样的吗,我想着这样会不会提高资源的时间,用完资源就解锁,把资源给别。还是说他上完锁,用完资源,遇到下一个锁就自动去找.release(),还是说怎么的,把.release()放在一起和我那样用完资源就.release()有什么区别,他的流程是怎么回事,哪样运算更节约资源和时间
    2020-03-19 11:32:55
  • 好帮手慕笑蓉 回复 提问者 玖__ #2
    同学,你好。有几个点,同学需要明确: 1.锁不会自动去找.release()进行解锁,只有程序运行到.release()代码,才会解锁; 2.如果把 your_lock.release()提到了前面,那么前面的锁就只锁住了a资源,和b资源就没有关系了,少了一部分资源竞争,效率相对会有所提升。 3. .release()放在一起时,锁住的资源是a和b,要锁的资源看程序的需求,不是随便挪动上锁和释放锁的位置。 如果解决了你的疑惑,请采纳,祝学习愉快~
    2020-03-19 17:49:53
  • 玖__ 提问者 回复 好帮手慕笑蓉 #3
    谢谢老师,
    2020-03-19 17:55:48
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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