所谓CAS分段机制,其维护这一个base变量和一个cell数组,当多个线程操作一个变量的时候,先会在这个base变量上进行cas操作,当它发现线程增多的时候,就会使用cell数组。比如当base更新为3的时候发现线程增多(也就是casBase操作失败),那么它会自动使用cell数组,每一个线程对应于一个cell,在每一个线程中对该cell进行cas操作,这样就可以提高并发效率,分散并发压力。在LongAdder中的源码如下:
当线程增多,每个cell中分配的线程数也会增多,当其中一个线程操作失败的时候,它会自动迁移到下一个cell中进行操作,这也就解决了CAS空旋转,自旋不停等待的问题。这就是自动迁移机制。
具体在源码中的体现如下(该段代码在抽象类Striped64下,LongAdder继承自该类)
探讨了CAS分段机制如何通过base变量和cell数组提高并发效率,解决CAS空旋转问题。当线程增多,自动使用cell数组分散并发压力,线程操作失败时自动迁移至下一个cell。
84万+





