00:00
那么它这也是仅是一个模拟对吧,咱们把这个CS算法模拟一下对吧,但实际上跟人底层是不是还是不一样的呀,对吧,但基本是道理呢,是跟这个是没有问题的啊,咱们过来试一试,叫做test,叫做compare吧,嗯,PAR compare and swap,那这个时候呢,我们说这个CS实际上是一个什么东西呢?大概就是这个意思,然后首先呢,我也给它就就直接来这个类吧,这里实际上首先你是不是得有个内存值啊,大概就是一个t value,这是不是就是内存值,我们对内存内存值吧,然后呢,它会有一个注意,这得是同步的对吧,C是,然后有个叫做get方法,这个是不是就是获取内存值的,叫做获取呃内存值,获取内存值的一个操作,那么相应的呢,这里呢,我们会有个叫做比较,用于比较的一个方法,大概呢,它是这样写,当然是不是也是同步的呀,CHY。
01:00
RO对吧,Synchronized返回一个int,就是说比较,不管成功与不成功,它都会返回原来的就值对吧,就是叫做compare para compare and swap,这里头呢,你传每次调用它的时候,你就必须得传参数,包括我们说计算机底层它也是这么写的,包括我们说就是gdm,是不是对底层的这个有知识啊,当咱们这个GD调用底层的时候,它也得传这两个值,听懂吧,这个呢,我们是在源码中都能看得到的啊,有兴趣的话可以看看,比如说原子变量,看看那个con的哈希麦都能看得到,那这个时候呢,它会有个什么呢?会有一个叫做预估值,叫做预估值,然后呢,与此同时是不是得有一个你要替换的这个新值啊,然后比如说Y6对吧,首先呢,它在这个这里边呢,它得先读,每次你在替换的时候呢,它是不是得先读一下原来的内存值是什么,是不是先读。
02:00
加内存值啊,读完这个内存值以后,是不拿这个叫做内存值,也就是原来的值吧,跟我你现在要预估的就是你这次将要预估的这个值,是不是跟他比一下呀,如果你预估值跟内存值比一样的话,那我怎么样啊,是不是就替换呢?对吧?那就替换,那就把z.Y6等于new y6是不是替换呢?那也就是说你不管这次的替换成不成功,它最终都会把这个内存值old value返回,都会把这个返回,那么这个,那实际上呢,最终呢,你还得有个叫做设置值的一个操作,对吧,叫做。Syn ch single n返回个补,就是说你最终呢,成功没成功叫做compare,嗯,And set,当然你是不是得有这个预预估值啊,PCPD这个好像少个D,然后呢,来个Y6,然后like in的也是new value6对吧?那这次做的是什么操作呢?就是你这个叫做预估值,等于叫做compare and swap,然后预估值和新纸对吧,就是看成功没成功的意思对吧,是不是调用上面这个方法呀,那每次调用的时候呢,它实际上是这么个操作,发现每个你得获取,然后比较,然后是不是你你得有这个设置啊对吧,它并且每一个方法都是独立的,并且它都是single that对吧,带锁咱们模拟是带锁底层,至于怎么做的,是不是应该差不多类似,但不是用的这个东西啊,那是硬件里的东西,这是我们gbm里的东西吧,那这个时候呢。
03:39
我说怎么去用呢?我们也搞一个现成吧,那就嗯搞一个现程行,那么就搞一个线程,搞几个呢?搞十个线程可以吧,也搞十个线程,然后来一个叫做new thread,执行new一个roundable,是不是实现reable接口啊,然后呢,对点去start,然后这里呢,每次要调用这个方法,我给它创建个对象finalno的CAS,对吧,等于new一个啊对吧,然后呢,这样的话呢,你每次你要最终你说要设置成这种感知啊,比如说我要调用CAS的compare and set,这个时候你是不是要有预估值,当然新值我们是不是随便指定啊,比如说我们可以给它生成一个随机数,这是要我们替换的值,是不是这意思啊,那相的,这个时候你是不是得有预估值,预估值,你得把人家内存中的读过来了,那么怎么读呢?
04:39
你是不是通过CS的get一次,那么先get一次看看原来的值,先get一次,看看原来的这个值是什么,PEY6对吧,Y6等于它,然后再把这个值传过去看吧,也就是说这个细节在于哪呢?你每次比较和替换的时候,你是不是获取一次啊,就是获取内存值吧,然后呢,当你进行比较和你自己进行比较和替换的之前,你是不是再次get一次内存值,那有可能你这次盖的和你之前这次的这个是不是有点不一样了,是不是也设计有可能的呀,对吧,那就是这个道理啊,那每次呢,你设置完之后呢,返回一个布尔值,就说明成功没成功,我们就可以试试,当然这个过程是不是有成功有失败啊,不能是不是都成功啊,也只是满足我们那个条件,如果你他俩相等,我是不是才让你设置啊,不然的话是不是就设置不了,是这意思吧,那这样的话。
05:39
就是这样的效果对吧,那这就是说白了就是那个CS算法模拟对吧,模拟的CS算法大概就是这么回是对吧,模拟CS算法能看懂吧,对吧,每次之前你就先get一次。嗯,好了,这里呢,就了解一下了解。
我来说两句