CAS的相关知识总结

目录

一、CAS的概念

二、CAS的应用

1、实现原子类

2、实现自旋锁

三、ABA问题

1、什么是ABA问题

2、解决ABA问题的方法


一、CAS的概念

CAS:全称是Compare And Swap,即比较并交换。

        它会把内存中的某个值,和寄存器A中的值进行比较,如果两个值相同,那么就把寄存器B中的值和内存中的这个值进行交换。

        进行CAS主要目的是将寄存器B中的值放到内存中。

用一个伪代码来解释CAS:

 CAS最强大的地方在于,以上的操作是通过一个CPU指令完成的,所以它不仅高效,而且还是线程安全的

二、CAS的应用

1、实现原子类

什么是原子类?

        在多线程环境下进行count++操作时,这种操作是线程不安全的,要想保证线程安全就得加锁,但是加锁又会导致效率降低。

        所以我们可以使用CAS操作来实现一个原子的++操作,从而既保证了线程安全,也保证了效率问题。

        AtomicInteger类就是一个典型的原子类~

伪代码解释原子类:

2、实现自旋锁

自旋锁:当锁被一个线程持有时,其他线程不会挂机等待,而是会反复询问当前的锁是否被释放,如果锁被释放,那么就可以第一时间获取到这个锁。

自旋锁的实现方式和原子类比较相似~

伪代码解释自旋锁:

这种实现方式的自旋锁会消耗大量CPU资源,如果预期锁竞争不太激烈时,比较适用自旋锁~ 

因此自旋锁也是一个轻量级锁,也是一个乐观锁~

三、ABA问题

1、什么是ABA问题

       CAS进行到比较操作的时候,如果发现寄存器A中的值和内存中值M相同,此时,我们无法确定M是否是始终没发生过变化的M,还是说M经过了一些计算之后又变回了原来的M。

举个栗子:

        假设男生A和女生B是一对情侣,有一天,他们分手了,都变成单身的状态。但是男生A又和女生C处了一段时间对象后分手了,于是他又以单身的状态和女生B复合。

        在A和B分手期间,女生B无法确定男生A是否找其他妹子处过对象,还是说男生A分手后一直是单身的状态。

2、解决ABA问题的方法

虽然ABA问题发生的概率极低,但也是一个隐患问题,我们需要想办法解决它~

        我们可以记录M的修改次数(版本号),或上次修改时间,两个值都是只增不减,以此来解决ABA问题~

        那么在进行CAS比较的时候,我们不用比较M和A的值,而是比较M的版本号,或者M的上次修改时间:

(a) 如果当前版本号和读到的版本号相同,则修改数据,并把版本号+1;

(b) 如果当前版本号大于读到的版本号,则操作失败。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CAS单点登出功能的实现中,需要在CAS服务器端和CAS客户端应用中进行相应的配置。以下是配置的相关信息: CAS服务器端配置: 1. 在CAS服务器的配置文件(如cas.properties)中,需要设置以下属性: - `cas.logout.followServiceRedirects`: 设置为true,表示在登出过程中跟随服务端的重定向操作。 - `cas.logout.redirectParameterName`: 设置重定向参数的名称,默认为service。 - `cas.logout.addHandlerToChain`: 添加登出处理器到处理链中,例如:`cas.logout.addHandlerToChain=MyLogoutHandler`。 - `cas.logout.handlers.MyLogoutHandler.enabled`: 启用自定义登出处理器,需要根据实际情况进行配置。 2. 配置CAS服务器的登出URL: - 在CAS服务器的配置文件(如cas.properties)中,设置`cas.logout.defaultLogoutUrl`属性为CAS服务器的登出URL。 CAS客户端应用配置: 1. 配置CAS客户端应用的web.xml文件: - 添加CAS过滤器(如Cas20ProxyReceivingTicketValidationFilter),用于接收和验证CAS票据,并获取用户身份信息。 - 添加CAS单点登出过滤器(如SingleSignOutFilter),用于接收CAS服务器的登出请求并执行相应的登出操作。 2. 配置CAS客户端应用的属性文件(如cas.properties): - 设置`cas.server.logoutUrl`属性为CAS服务器的登出URL。 - 设置`cas.client.logoutRedirectParameterName`属性为重定向参数的名称,与CAS服务器端配置保持一致。 以上是CAS单点登出功能的相关配置信息。具体的配置方式和步骤可能会根据CAS服务器和客户端应用的不同而有所差异,可以参考CAS的官方文档或相关文档进行具体配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃点橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值