银行排队办业务模拟锁的实现(AQS逻辑解析)并透析锁的性质(可重入性/公平性/共享性/自旋性)

我保证各位对锁这个概念不太清楚的同学,在看完这个例子后,会深入的理解锁,并理解锁的各种不同的特性以及锁是这么分类的.总之,一篇文章搞通透,如果同学觉得这个有用的话,欢迎点赞或评论,博主手打两小时,所以同学看起来也比较长,请耐心读完!!!

场景,客户A,B,C 3人去银行办理业务(业务办理时间不定,一个客户可能会同时办理多个业务);

银行内部有工作人员 1个业务员(负责办理业务),1个大堂经理(负责维护秩序);

业务窗口有显示屏,能显示当前办理业务的客户名称和当前正在办理的业务数量;

业务窗口有大喇叭,能随时喊其他客户来办理业务;

银行有一排用户休息区,用户可以坐在休息区上,但休息区的门最开始时关着的;

大堂经理有休息区的钥匙,并且他心情好时面色和善,心情差的时候面色凝重;

A,B,C 3个客户按照顺序进入银行,以下时办理步骤:

1.客户A进入银行,发现银行没有其他客户,就直接去找业务员办理新开银行卡业务,业务员直接给A办理开银行卡业务,并设置窗口显示屏内容:"客户A正在办理业务,当前办理业务数量1";

2.客户B进入银行,先直接走到业务窗口看了一眼,发现显示屏上显示"当前办理业务数量1",知道了业务员在忙,就准备到休息区找把椅子做,在这个时候他还不死心,又看了一样业务窗口,发现显示屏还是显示"当前正在办理业务数量1",没办法,他就想区休息区坐着等,这个时候发现休息区门关着,就找来客户经理开门;

3.客户经理面色和善的开了门,自己坐在了第一个椅子上,因为他需要维护秩序,让客户B坐在了第二个椅子上;

4.客户B坐上后不死心,又跑出去看了一眼显示屏,发现还是显示"当前办理业务数量1",然后客户B又坐到了椅子上,此时大堂经理面色凝重,客户B再也不敢乱来,安安心心的在椅子上躺平了;

5.客户C进入银行,一样先走到业务窗口看了看,发现显示屏显示"当前办理业务数量1",同样选择进入休息区等待,也同样在进入休息区前不死心,进入前又看了一样窗口,发现显示屏还是显示"当前办理业务数量1",最后进入休息区,一进来就看见大堂经理面板着脸,也不敢瞎跑,安安静静的躺在第3把椅子上;

6.客户A办理完成业务,显示屏清空,此时业务员用喇叭喊话,"请下一个客户来办理业务",此时大堂经理做的位置的下一个位置的客户(此时时客户B)听到后,兴高采烈的跑去办业务,然后显示屏会显示"客户B正在办理业务,当前办理业务数量1",此时第2把以自空了,大堂经理就坐到第二把椅子上,新先不守规矩的人终于走了,脸上露出了笑容;

7.客户B办完业务后,同样业务员把显示屏清空,用喇叭喊话"请下一个客户来办理业务",以此类推.

上面讲的只是一种普遍的办理流程,除了上面的流程外,还会又很多种特殊情况,下面说一下几种特殊情况:

1) 步骤6种,如果客户B收到喇叭通知去办理业务的过程中,恰好来了个客户D,客户D进门的时候客户B还没从休息室出来,D进来以看业务窗口正好没有人,就直接去办业务了,此次客户B就又办不了业务了.(注意:这种情况下客户D是后来的,但是是先办理业务的,这就是非公平性的体现).

2) 我们可以注意到,客户B在老老实实躺在椅子前是看过了3次显示屏的,这种做法的好处是,万一前面那个客户正好在这个时间段内办理完离开柜台,他就可以直接去办理业务了.(注意:这种思想类似于锁的升级过程,最初先尝试自旋获取(尝试了3次),获取不到后再阻塞等待)

3)客户A如果在半银行卡的过程中,又先顺便开通的网银,此时他是不需要再看窗口是否有人的,因为他窗口在办理业务的人本来就是他,他可以直接要求办理其他业务,业务员只需要将当前办理业务数量改为2即可,同样,他也必须要办理完两个业务后才能离开.(注意:这种思想体现了锁的可重入,已经获得锁的线程可以直接再次获得锁,将状态量增加即可)

上述流程演示的只是一个可重入的非公平的排他锁,那么我们来想象一下,改变哪些逻辑就能改变锁的性质呢?

1. 可重入/不可重入: 如果客户A要求办理网银时,业务员说,现在有人正在办理业务,你先等上个业务办完,这时客户A就懵逼了,他不办网银就没办完办完银行卡,没办完银行卡就不能办网银.(注意:这个思想就是不可重入锁的死锁,这种情况很危险,所以我们用的锁一般都是可重入锁)

2.公平/非公平:上面A办完业务后,在B还没有走出休息区时,D正好进来了,此时窗口是空的,如果D有素质的话他就会先看看休息区有没有人在等,有的话就自觉去排队,没有的话再去办理业务.(注意:这种思想和上面的比起来就是公平/非公平特性的区别)

3.共享/排他:假如B用户是想去银行窗口看下老赖名单,是一个很简单的需求,不会修改银行系统任意数据,巧合的是C也是先去看这个名单,那么A走后,他们两就可以牵着手一起去看这个名单,但是如果后面又有个D在拍着队,他想办的业务也是开银行卡,D就不能跟他们一起去了.(这种思想就是共享/排他锁,通常也成为读/写锁,读读共享,读写不共享giant,谢谢不共享)

3.自旋/非自旋:如果B进入休息区后有空就出去看一下窗口空了没有,一直不断这么干,业务员就不需要喇叭通知,B看到窗口没人后自己就会跑去办理业务(这种思想就是自旋/非自旋锁的区别)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值