00:00
好,各位同学,那么接下来我们呢?讲一下。下一个知识点。原子要玩火?那么就是。时间戳的原子引用。啥意思啊,说穿了就是怎么解决API问题。那么来,同学们。根据前面我们讲了那么一大堆A问题。那么你们认为怎么办呢?开始过去。然后最后过去都是同一个池,但是我并不知道你中间修改过多少次。那么这个时候就是有可能会有猫腻,中间是有问题的,那么这个时候同学们大家想一想怎么解决ABA问题呢?好,很好,有同学说改的时候加时间非常正确,那么把这个东东解过来就是什么?
01:00
新增。一种机制啊。那就是修改。版本号有点类似于。时间戳。那么同学们这个是什么意思呢哈,就比方说刚才我们已经讲过了两个线程。好,你一开始。T1假设它的初始值是100,版本号是一,T2线程它的初始值是100,版本号是一,没问题吧,这是两个的起步,但是现在T1。拿走的原值是100,版本号是一,T2拿走的原值版本号是一,值是100,那么现在干嘛呢?T2要做A。现在你T2要干一件什么事呢?假设他把它从100改为101了,没错吧,但是版本号。改一次增一个变成了二。这个时候是不是从A改为了B,同学们能跟上,但接下来T2线程他又干一件事,又把它改回来了100,但是不好意思啊,你就是改回来,只要改一次,我永远流水号往前走,一位现在的版本号是三,同学们这么说能跟上。
02:16
那么好关火。A。B。好,如果按照原来的CS值比较值的话,你懂的,T1过来一看呀。值是100啊,没什么问题啊。我就认为一切顺利。但是别忘了中间有猫腻。T2线程已经把这个值从100改过一次101,只不过他又偷偷改回来了,那么这个时候干嘛呢?假设我踢一线产。我准备把它从。100,我的劳动成果是要2019,那么这个时候对于第一线场而言,你懂的。我往上提,我认为别人没动过,其实这个有点类似于大家学过的乐观锁,听懂了吗?
03:04
我很乐观,我总觉得别人不会在我之前修改,我上去就提交一个什么版本号。那么回答我。我的初始是值100,翻本耗时间。T1线程修改一次,只要把它从100修改为209。我提交上去的是版本号是二,但是抱歉。你这个二。是不是弱于我现在服务器上的最新版本号是三,说明在你之前虽然说值。干嘛可能?是一样的,但是抱歉,你的版本号已经落后于最新版本号,此次修改作废,你需要先从服务器上拿到第三号版本的这个最新值啊,然后再进行修改,那么所以说怎么来规避ABA问题,就是加。是吗?版本号修改版本号类似于试卷戳,那么。针对于这种情况,我们亲爱的可爱的GUUC工具包又给我们想到了,所以说同学们一定要好好的研究一下GUUC的源码,特别对你的干嘛做难事必有所得。
04:12
那么这个时候干嘛呢?写的非常棒,那么这个时候干嘛呢?大神呢,给我们又给他干了一个类。Step reference,那么这个类就比前面这些类。都更加的厉害和牛叉。那么呢?接下来。我们呢,就来给大家聊聊ABA。问题的解决。OK,那么呢,重点就是我。什么的。什么m sta reference,带时间戳的原子引用。那么呢,先把这个理论给大家说到这儿,下一讲我们再进行编码验证。
我来说两句