CAP
证心
这个作者很懒,什么都没留下…
展开
-
【CAP】CAS和自旋锁
自旋锁可以看成是不断自动重试的乐观锁,也会有乐观锁的ABA问题。自旋锁的实现基础是CAS功能。什么是自旋锁?自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-waiting。它是为实现保...原创 2019-03-26 11:32:06 · 3204 阅读 · 0 评论 -
【CAP】JAVA之AtomicReference非锁同步
并发最简单的竞态问题是操作一个基本变量,如一个整数。复杂问题是同时操作多个变量,要保证变量的结果一致,比如A加1那B就要减1。简单问题和复杂问题都可以通过锁来实现。用锁划出临界区(一段代码),这段代码通过锁保证不能被并行执行。代码就是对竞态数据的逻辑操作,并且只能通过这段代码操作竞态数据。CAS提供了另一种解决竞态问题的方案。AtomicReference解决竞态问题比如A加1那B就...原创 2019-03-26 11:41:06 · 152 阅读 · 0 评论 -
【CAP】数据库的竞态问题
有并发就有竞态,就有锁的问题。最基本的是数据库的竞态问题。一、脏读、不可重复读、幻读1、脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。例如:张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。与此同时,事务B正在读取张三的工资,读取到张三的工资为8000。随后,事...转载 2019-03-26 11:43:45 · 263 阅读 · 0 评论 -
【CAP】(转)分布式事务最佳实践方案汇总
说到分布式事务,就会谈到那个经典的”账号转账”问题:2个账号,分布处于2个不同的DB,对应2个不同的系统A,B。A要扣钱,B要加钱,如何保证原子性?传统方案 – 2PC(1)2PC的理论层面:2pc涉及到2个阶段,3个操作:阶段1:“准备提交”。事务协调者向所有参与者发起prepare,所有参与者回答yes/no。阶段2:“正式提交”。如果所有参与者都回答yes,则向所有参与者发起com...转载 2019-03-26 14:55:46 · 247 阅读 · 0 评论