什么是cas
1.cas比较并交换,是多线程环境下保证数据一致性的机制
2.比较一个值和目前这个值是否一致,如果一致就把新值替换进去
3.如果不一致,就不做处理
会出现那些问题?
1.如果一个值原来是A,另一个线程将他改为B,然后又把他改回A,cas在比较的时候,仍然匹配A,这就是ABA问题
,可以通过版本号来解决这个问题,如果一致在更新
2.在cas机制中,如果线程不停的尝试cas操作而不成功,会一直进行自旋操作,这会浪费cpu的时间,这就是循环时间长问题,也叫做空等待
3.一个cas操作只能保证一个共享变量的原子操作,对于多个共享变量的操作需要加锁来保证原子性
cas空等待会造成那些问题?
1.cas空等待会造成cpu利用率飙高,资源浪费,死循环,访问系统的时候会出现卡顿