`
lobin
  • 浏览: 417420 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

CAS

Compare And Swap

Compare And Exchange

Compare And Set

 

目前大多数CPU处理器都支持CAS操作指令。不同处理器在支持CAS操作时有点差异。

 

很多编程语言也都支持CAS操作,以实现原子操作、原子变量、非阻塞同步、非阻塞算法、自旋锁、乐观锁等。如C11等。但基本都使用了CPU处理器对CAS的支持。基本上采用的是硬件实现,很少有软件实现。

 

CPU = 686, Virtual 8086 Mode, Id/Step = 06FD, A20 enabled

 

CMPXCHG: Compare and Exchange

下图形象地描述了CMPXCHG: Compare and Exchange这种比较交换技术。



图中Compare是将寄存器AL、AX、EAX、RAX中的值和r/m8、r/m16、r/m32、r/m64中的值进行比较,这里的Exchange交换体现在两者的比较结果为true的情况下,两者的值相等,则将r8、r16、r32、r64的值存入r/m8、r/m16、r/m32、r/m64。

 

由于两者的值相等,所以在将r8、r16、r32、r64的值存入r/m8、r/m16、r/m32、r/m64之前,相当于将r/m8、r/m16、r/m32、r/m64中的值存入寄存器AL、AX、EAX、RAX(实际上并没有这个操作,所以上面为了形象的表达Exchange交换,用虚线表示)。

 

形象的描述为:

       A->B->A'

A对应上面的r8、r16、r32、r64,B对应上面的r/m8、r/m16、r/m32、r/m64,A'对应上面的寄存器AL、AX、EAX、RAX。

A'相当于引入的第三个临时变量。就相当于我们在交换两个变量的值时,通常会通过一个临时变量一样。

void swap(int *a, int *b) 
{
  int tmp = *a;
  *a = *b;
  *b = tmp;
}

 

上面的矩形框形象的将A、A'看成一个整体,所以就可以认为:

A<->B

 

如果两者的值不相等,则将r/m8、r/m16、r/m32、r/m64的值存入寄存器AL、AX、EAX、RAX,如下面的右图。

 

此外还涉及到ZF标志位,如果两者的值相等,则会设置ZF标志位,否则清楚ZF标志位。


将寄存器AL、AX、EAX、RAX中的值和r/m8、r/m16、r/m32、r/m64中的值进行比较时,如果两者的值不相等,则将r/m8、r/m16、r/m32、r/m64的值存入寄存器AL、AX、EAX、RAX。如果两者的值相等,则将r8、r16、r32、r64的值存入r/m8、r/m16、r/m32、r/m64。

 

那么在使用CMPXCHG来实现赋值更新变量时,我们怎么判断更新成功了?如果在比较时,如果不相等,那么就不会更新变量,会返回变量原来的值。只有在比较时,相等的情况下才会更新变量。

 

在比较的时候,如果相等,会设置标志位ZF,否则会清除标志位ZF。但我们无法知道标志位ZF是被设置还是清除。

 

怎么判断更新成功?参考另一篇文章:https://lobin.iteye.com/blog/2325737

 

关于如何在嵌入汇编中使用CMPXCHG,参考另一篇文章:https://lobin.iteye.com/blog/2325737

 

通过CMPXCHG怎么实现原子操作?参考另一篇文章:https://lobin.iteye.com/blog/2325737

 

Java也支持CAS操作,参考另一篇文章:https://lobin.iteye.com/blog/2325737

  • 大小: 18 KB
  • 大小: 29.6 KB
分享到:
评论

相关推荐

    CAS 协议 票据、url介绍,包括cas1.0和cas2.0

    CAS 协议 票据、url 介绍,包括 cas1.0 和 cas2.0 CAS 协议是一个基于 HTTP 的协议,分为两部分:票据(Ticket)和 URL。CAS 协议的主要目的是提供单点登录(SSO)功能,实现用户的身份验证和授权。 票据(Ticket...

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...

    cas4.2.7 实现其他系统和cas互相认证互信

    3. **集成CAS客户端库**:在外部系统中,需要集成CAS客户端库,如Java CAS Client、Spring Security CAS等,它们负责处理与CAS服务器的交互,包括重定向用户到CAS登录页面、接收和验证服务票证。 4. **配置客户端...

    cas-server-3.5.1和cas-client-3.2.1

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,简称SSO)系统,它允许用户通过一个认证入口访问多个应用系统,而无需在每个系统上分别进行登录。在这个压缩包中,...

    cas 自定义登录页面

    CAS(Central Authentication Service)是一种广泛使用的开放源代码单点登录(Single Sign-On,SSO)框架,它允许用户通过一个中央认证服务访问多个应用系统,而无需为每个系统单独进行登录。在实际的企业环境中,...

    H3C CAS 3.0 云计算平台 【附CAS3.0产品培训PPT和安装使用指南】.rar

    H3C CAS 3.0版 H3C CAS 3.0产品培训胶片 H3C CAS-云计算管理平台技术白皮书V2.0 H3C CAS-云计算管理平台 安装指导-5W101-整本手册 H3C CAS-维护手册V2.0 H3C CAS-工程开局指导手册V2.0 H3C CAS-Rest API H3C ...

    cas-4.1.7最新

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,它允许用户通过一个认证过程访问多个应用系统,而无需为每个系统单独登录。CAS 4.1.7是该框架的一个特定版本,发布于...

    iscas.rar_iscas_基准电路_逻辑综合

    本文将围绕"iscas.rar_iscas_基准电路_逻辑综合"这一主题,深入探讨这些概念及其在实际应用中的重要性。 iscas基准电路是一套广泛使用的标准测试集,由国际固态电路会议(International Solid-State Circuits ...

    cas修改登录页

    【标题】"CAS修改登录页"是一个针对中央认证服务(Central Authentication Service,简称CAS)的定制化实践。在单点登录(Single Sign-On,SSO)系统中,CAS扮演着核心角色,它提供了统一的身份验证服务,使得用户只...

    cas自定义登录页面

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,用于在网络上验证用户身份。它允许用户通过一个认证过程访问多个应用系统,而无需为每个系统分别进行登录。在你的场景...

    idea 中导入cas

    在IT行业中,Cas(Central Authentication Service)是一种广泛使用的开源身份验证和授权框架,它使得单点登录(Single Sign-On, SSO)变得简单。本文将详细介绍如何在IntelliJ IDEA(简称Idea)中导入和编译CAS项目...

    基于springboot,cas5.3,shiro,pac4j,rest接口获取ticket不再跳转cas server登录页

    本文将深入探讨如何利用Spring Boot、CAS 5.3、Shiro、Pac4J这四个强大的工具来构建一个高效且用户友好的REST接口,以获取CAS(Central Authentication Service)票据,避免用户被重定向到CAS服务器的登录页面。...

    CAS restful接口调用

    ### CAS Restful接口调用详解 #### 一、CAS简介 CAS(Central Authentication Service)是一种开源的单点登录协议和服务实现。它旨在减轻单一Web应用的登录流程,并为多个服务提供一个集中式的认证机制。CAS支持...

    cas客户端jar包

    CAS(Central Authentication Service)是耶鲁大学开发的一种基于Web的单点登录(Single Sign-On,简称SSO)协议。在企业或机构的信息系统环境中,它允许用户通过一次登录即可访问多个应用系统,无需多次输入用户名...

    cas-server-3.4.10-release和cas-client-3.2.1-release两个

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,用于在多应用环境中统一用户认证。这个协议由耶鲁大学开发并开源,现在由Apereo基金会维护。标题提到的"cas-server-...

    H3C CAS云计算软件套件《H3C CAS七日通》.rar

    《H3C CAS七日通》是一份针对H3C云计算软件套件——H3C Cloud Automation System (简称H3C CAS) 的详尽学习资料,旨在帮助用户在一周内快速掌握该系统的使用和管理。这份资料包含了有声讲解版,以音频形式辅助理解,...

    cas3.5.2单点登录文档详细配置

    3. 配置CAS Client,这可能涉及修改web.xml文件,引入CAS客户端库,并配置客户端的信任CAS Server的地址。 4. 可能需要修改CAS客户端的Java源代码,特别是对于证书验证的问题,可能需要重新编译并替换原有包。 5. ...

    cas源码修改-登录页面

    CAS(Central Authentication Service)是一种广泛使用的开放源码身份验证框架,它允许用户通过单一登录(Single Sign-On,SSO)访问多个应用系统。在“cas源码修改-登录页面”这个主题中,我们将深入探讨如何定制...

    SpringBoot+Security+Cas

    SpringBoot+Security+Cas是一个集成解决方案,用于构建安全的Web应用程序。这个Demo是为那些希望了解如何在Spring Boot应用中整合Spring Security和CAS(Central Authentication Service)服务的开发者准备的。下面...

    H3C_CAS_LINUX安装cas-tools

    H3C_CAS_LINUX安装cas-tools 在虚拟化环境中,安装 CAS Tools 是一个非常重要的步骤。CAS Tools 是一个功能强大的虚拟化管理平台,能够帮助管理员更方便地管理和维护虚拟机。下面,我们将详细介绍如何在 Linux 系统...

Global site tag (gtag.js) - Google Analytics