`
raymond2006k
  • 浏览: 295101 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

利用CAS原理处理修改操作的分布式事务控制

阅读更多
1. CAS
   CPU指令 和 程序并发原语中存在 CAS 概念, Compare and Set, 就是修改一个寄存器区域或变量值时,先检查 old value, old value相同再进行修改,否则放弃。
 
   例如:
   已知 int a = 1;
引用
   非 CAS 赋值为:  a = 10;
   CAS 赋值为   compareAndSet( 1, 10);

  这样,在多线程并发操作时,最终 a 将被原子性的修改,而不会发生冲突的结果。

   而数据库的事务中并发冲突的场景与之非常类似,都是对共享资源竞争访问时的突出问题。

2. 基于CAS机制的数据库update操作
   由CAS的原理,可以考虑以类似的方式处理数据库的update操作。

   假定订单 OD_0100 的总价款为1100 元, 现在要将其修改为 1500 元,

引用
   update sale_order set order_amount = 1500.00
   where order_id = 'OD_0100'


采用 CAS 机制进行修改,假定已经知道订单修改前的总价款 1100,则update SQL为
引用

   update sale_order set order_amount = 1500.00
   where order_id = 'OD_0100'
     and order_amount = 1100.00

  若出现并发冲突,例如:order_amount 已经先其他请求修改为 900, 那么上面的 update 语句的操作结果数为 0; 此时,客户端需要重新查询订单,再尝试第二次修改。 这类似于 CAS 中的自旋。

3. 与其他事务机制比较
  数据库事务有悲观锁和乐观锁,乐观锁有一种机制是基于 version 字段来控制并发修改冲突。
  与version事务机制类似,CAS事务也是一种细粒度的锁。然而,version 为行级锁,粒度过大; 而 CAS 事务为列级锁,粒度更小。 根据锁机制的一般原则,粒度越小,并发性能越高。

0
0
分享到:
评论
2 楼 dogstar 2010-12-15  
stm就是cas的库/语言级别的实现.
1 楼 mercyblitz 2010-05-28  
CAS 直接操作内存,性能很好。

按照个人的理解,多CPU通过并行控制主存的CAS操作,但为什么不能分离内存操作了,分布式内存,岂不是更好?

相关推荐

    并发编程下的锁机制,乐观锁、悲观锁、共享锁、排他锁、分布式锁、锁降级原理篇

    本文将详细讲解几种常见的锁机制:悲观锁、乐观锁、共享锁和排他锁,并简要介绍分布式锁以及锁降级原理。 1. **悲观锁**: 悲观锁是一种保守的策略,它假设在读取数据时,数据极有可能被其他线程修改。因此,悲观...

    【面试资料】-(机构内训资料)面试必备之乐观锁与悲观锁.zip

    乐观锁和悲观锁是数据库事务控制中的两种重要策略,它们主要用在多用户并发操作同一数据时,以防止数据的不一致性。理解这两种锁的概念、原理以及应用场景对于开发者来说至关重要,尤其是在高并发环境下保证数据的...

    分布式锁三种实现方式及对比

    - **乐观锁**:基于比较并交换(CAS)的思想,假设并发冲突较少,只有在更新数据时检查是否被其他事务修改,若未修改则更新,否则重试。通常通过增加版本号字段来实现,例如在抢购、秒杀场景中防止超卖。 2. **...

    Redis面试题.pdf

    3. **原子性操作:**支持数据的原子性修改,确保数据的一致性和完整性。 4. **数据持久化:**提供两种持久化机制——RDB和AOF,确保数据安全。 5. **主从复制与高可用性:**支持数据备份和高可用部署。 6. **多语言...

    java程序员面试大纲错过了金三银四你还要错过2018吗.docx

    8. **分布式事务**:实现跨服务的事务一致性,常用的方法有两阶段提交(2PC)、补偿事务(TCC)、Saga事务等。 9. **负载均衡算法**:如轮询、随机、最少连接等,根据实际应用场景选择合适的负载均衡策略。 10. **...

    java超有用的面试题目

    - **分布式事务**:如两阶段提交、三阶段提交等协议。 - **负载均衡算法**:轮询、随机、最少连接等。 - **Zookeeper**:用于分布式协调服务,实现配置管理、命名服务等功能。 - **数据拆分**:垂直拆分针对功能模块...

    紅皮書c#2008高級編程 最新版

    - 讲解了事务处理、消息队列等高级特性。 - 分析了企业级应用程序的设计模式。 45. **消息队列(第45章)** - 介绍了消息队列的概念及其在分布式系统中的应用。 - 讨论了如何使用MSMQ进行消息传递。 - 分析了...

    JAVA上百实例源码以及开源项目源代码

    Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...

    (2024)跳槽涨薪必备精选面试题.pdf

    8. **分布式事务实现方案** - **两阶段提交**(2PC):协调者发起准备阶段和提交阶段。 - **三阶段提交**(3PC):增加了预提交阶段。 - **补偿事务**:基于 TCC(Try-Confirm-Cancel)模式。 9. **ZAB协议** -...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **原理**:分布式处理大量数据集的一种编程模型。 - **流程**:包括Map阶段和Reduce阶段。 - **应用**:广泛应用于大数据处理领域。 #### HDFS - **特点**:适合一次写入多次读取的大文件存储。 - **架构**:...

Global site tag (gtag.js) - Google Analytics