首页 > 编程知识 正文

喜欢CAS表示什么,电脑上cas是什么意思

时间:2023-05-04 22:02:48 阅读:47294 作者:3061

cas :比较和更换比较软件(cas )。 CAS算法的流程如下。 包含三个参数CAS ) v、e、n )。 v表示要更新的变量(存储器值),e表示预期值(旧),n表示新值。 此外,仅当v的值等于e的值时,才将v的值设置为n。 如果v和e的值不同,则当前线程不执行任何操作,因为其他线程已经更新。 最后,CAS返回当前v的真值。 CAS操作以乐观的态度进行,总是认为自己能成功操作。 如果多个线程同时使用CAS处理一个变量,则只有一个会获胜,更新成功,其馀的会失败。 失败的线程不会挂起

仅通知失败并允许重试,当然还允许失败的线程放弃操作。 基于这种原理,即使CAS操作未被锁定,其他线程也能够发现对当前线程的干扰并进行适当的处理。

CAS可能会产生的问题:

)1) ABA问题:

为了使CAS算法实现重要前提,必须检索内存中的某个时间点的数据,但与以下时间点进行比较后,该时间差类中的数据会发生变化: 例如,假设一个线程one从内存位置v中检索到a。 此时,另一个线程two也从内存中取出a。 然后,two进行了一些操作成为b,然后two将v位置的数据变为a。 此时,线程one进行CAS操作,发现内存中还留有a,one操作成功。 线程one的CAS操作成功,但并不意味着此过程没有问题。 乐观锁定的一些实现通过版本号(version )解决了ABA问题。 乐观锁在每次执行数据修改操作时都会带来版本号,如果版本号与数据版本号匹配,就可以执行修改操作,对版本号执行一次操作。 否则执行失败。 每次操作时版本号都会增加,所以不会发生ABA问题。 因为版本号只会增加而不会减少。

)2)效率损失问题:

两个线程从内存中执行CAS,一个线程检索a,另一个线程也执行同样的操作,但徒劳无功,极大地浪费了线程的效率。 另一个线程做的工作是徒劳的,线程内的工作可能会浪费

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。