使用CAS引发ABA问题

使用CAS引发ABA问题,第1张

由于CAS原子 *** 作性能高,因此其在JUC包中被广泛引用,只不过如果使用得不合理,CAS原子 *** 作就会存在ABA问题。

什么是ABA问题?比如一个线程A从内存位置M中取出V1,另一个线程B也取出V1。现在假设线程B进行了一些 *** 作之后将M位置的数据V1变成了V2,然后又在一些 *** 作之后将V2变成了V1。之后,线程A进行CAS *** 作,但是线程A发现M位置的数据仍然是V1,然后线程A *** 作成功。尽管线程A的CAS *** 作成功,但是不代表这个过程是没有问题的,线程A *** 作的数据V1可能已经不是之前的V1,而是被线程B替换过的V1,这就是ABA问题。

很多乐观锁的实现版本都是使用版本号(Version)方式来解决ABA问题。乐观锁每次在执行数据的修改 *** 作时都会带上一个版本号,版本号和数据的版本号一致就可以执行修改 *** 作并对版本号执行加1 *** 作,否则执行失败。因为每次 *** 作的版本号都会随之增加,所以不会出现ABA问题,因为版本号只会增加,不会减少。

参考乐观锁的版本号,JDK提供了一个AtomicStampedReference类来解决ABA问题。AtomicStampReference在CAS的基础上增加了一个Stamp(印戳或标记),使用这个印戳可以用来觉察数据是否发生变化,给数据带上了一种实效性的检验。

AtomicStampReference的compareAndSet()方法首先检查当前的对象引用值是否等于预期引用,并且当前印戳(Stamp)标志是否等于预期标志,如果全部相等,就以原子方式将引用值和印戳(Stamp)标志的值更新为给定的更新值。

AtomicStampReference的构造器有两个参数,具体如下:

AtomicStampReference常用的几个方法如下:

AtomicStampedReference的CAS *** 作的定义如下:

compareAndSet()方法的第一个参数是原来的CAS中的参数,第二个参数是替换后的新参数,第三个参数是原来CAS数据旧的版本号,第四个参数表示替换后的新参数版本号。

进行CAS *** 作时,若当前引用值等于预期引用值,并且当前印戳值等于预期印戳值,则以原子方式将引用值和印戳值更新为给定的更新值。

AtomicMarkableReference是AtomicStampedReference的简化版,不关心修改过几次,只关心是否修改过。因此,其标记属性mark是boolean类型,而不是数字类型,标记属性mark仅记录值是否修改过。

AtomicMarkableReference适用于只要知道对象是否被修改过,而不适用于对象被反复修改的场景。

>

关于提取Cookie的方法2007-05-24 09:43ASP中的Cookie用法:

Cookie是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个Web站点会话之间持久地保持数据。Request和Response对象都有一组Cookie。Requestcookie集合是一系列Cookie,从客户端与>

化学文摘社提供若干化学相关信息数据库,其中两个最基本的数据库是CAplus和Registry: CAplus包含世界范围内的化学期刊和其他科学期刊上的化学相关文章的文献目录检索信息以及摘要,超过2千7百万条文献和17亿引用记录。 Registry包含3千4百万种无机及有机化学物质的15亿余条属性数据、1千4百万条反应以及5千9百万DNA序列。 化学物质属性信息来自化学文摘社,使用CAS号对物质进行检索。 DNA序列信息由化学文摘社和美国国家生物技术信息中心的GenBank共同提供。

图的比例问题,取点前先把先把图设置成为大比例尺的图,比始现在是1:2000的图,在1:2000下取点显示的字是4号字的话,在1:500里只显示1号字,这样就小了,你先把比例改为1:500或其它,取好后再调回来。

以上就是关于使用CAS引发ABA问题全部的内容,包括:使用CAS引发ABA问题、asp转化为php、cookie如何提取admin等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9762489.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存