10分钟的时候 讲RLOCK时 运行结果请解释下

10分钟的时候 讲RLOCK时 运行结果请解释下

运行结果为

start lock

locked one

start lock

locked two

N----5 balance 0

start lock

locked one

locked two

-N--- 8;balance 0

strat lock

lock one

lock two

是怎么运行来的  详细说明下

还有最后的

print(the last  balance)

问什么没有输出


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

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

2回答
好帮手乔木 2020-03-02 13:43:09

同学你好:

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

请同学仔细看一下代码的执行顺序。

        print('start lock')

        # 添加锁

        your_lock.acquire()

        print('locked one ')

        your_lock.acquire()

        print('locked two')

输出start lock 还没有执行 your_lock.acquire()怎么会上了锁呢?

这个时候都还没有上锁呢。其中一个上锁后,后面的那个线程才需要等待。

如果我解决了同学的问题,请采纳!学习愉快^_^。

好帮手乔木 2020-03-01 11:45:28

同学你好:

RLock:多重锁,已经获得该锁的线程可以继续多次获得该锁,在同一线程中可以被多次acquire。如果使用RLock,那么acquire和release必须成对出现,调用了n次acquire锁请求,则必须调用n次的release才能在线程中释放锁对象。直到一个线程所有的acquire都被release,其他的线程才能获得资源。

执行顺序从上到下。由于加上锁之后,每次只能执行一个任务,所以哪个线程任务先抢上执行的机会就先执行那个线程。

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

同学没有输出:

print(the last  balance)

是由于要执行100线程任务,同学可以调低执行的次数。

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

如果我解决了同学的问题,请采纳!学习愉快^_^。

  • 提问者 weixin_慕粉3466558 #1
    有两个点没有懂 第一 哪个任务先抢上 是随机的吗 第二 start lock locked one start lock locked two 有两个start 后面 只有一个start 对应两个 locked 为什么会有差距 不是一样的原因是什么
    2020-03-02 08:36:01
  • 同学你好: 1、线程任务是并发执行的,所以那个任务先抢上锁的资源,那么该线程就先执行。 2、这段执行结果充分说明了线程是并发执行的。出现两次start lock,这是两个线程没有上锁,所以就出现了两次,但是当其中一个线程上锁后,另一个线程就必须等待,因此就locked one 和locked two就各出现一次。由于是控制台,所以输出的内容顺序不怎么符合线程并发的现象,并发同学可以认为是同时执行。学习愉快^_^。
    2020-03-02 11:47:59
  • 老师 按照您的思路 我理解不了 我理解的是 start lcok, locked one, start lock,locked two 是一个线程按照顺序执行的两次RLOCK,不明白您说的 ‘ 出现两次start lock,这是两个线程没有上锁 ’,打印locked one 和locked two 时明明都已经 acquire了,咋还没上锁呢 而且 我认为 start lcok, locked one, start lock,locked two 然后输出 N--- balance 是一个循环,这是一个线程,释放后 再根据哪个线程抢上了 再按照start lcok, locked one, start lock,locked two 然后输出 N--- balance 这样格式才对,这块实在不还理解 还请老师多讲下 感谢
    2020-03-02 12:24:12
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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