3. CAS

1. 什么是CAS

• CAS的全程是compare and set/比较和设置。也有compare and swap/比较和交换的说法。但本质上他的意思都是一样的,即对一个数据跟一个预期值进行比较,如果数据跟预期值一样则进行交换,如果数据跟预期值不一样则算了,不进行交换了。
• 这样的操作逻辑是为了防止当前线程在设置一个互斥量的时候,被其他线程先设置了,导致设置冲突覆盖了其他线程的预期设置。
• CAS的关键是compare和set操作一起作为一个原子操作,而不能分开导致有其他操作在compare和set之间执行,在Java的JDK中该原子操作由Linux的函数进行保证,而Linux的函数则是使用硬件来保证这个操作的原子性。

2. ABA问题

• ABA问题指的是某个数据本来是A,中间被替换成B,之后又被替换成A。CAS的时候本来要比较的是第一个A,但是由于被替换成了第二个A导致比较相等,而执行了set操作。
• 解决这个问题的方法便是在数据上增加一个版本号,这样版本1的A和版本2的A便不相等了。

你可能感兴趣的:(3. CAS)