并发编程的艺术05-队列自旋锁
Queue Spin-Lock 队列锁是一种可扩展自旋锁的方法,这种实现比BackoffLock稍微复杂一些,但是却有更好的移植性。在BackoffLock算法中有两个问题: 1. cache一致性流量:所有线程都在一个共享的存储单元上自旋,每一次成功的锁访问都会产生cache一致性流量。(尽管比 TASLock要低)。 2. 临界区的利用率低:线程延迟时间长,导致临界区利用率低下。在队列中,每个线程检测其前驱线程是否已完成来判断是否轮到了自己。让每个线程在不同的存储单元上自旋,从而降低cache一致性流量。队列还提高了临界区的利用率,因为没有比要去判断何时要访问它:每个线程直接由队列中的前驱线程来通知。队列还提供了先来先服务的公平性。 Anderson Queue Lock public class ALock implements Lock { ThreadLocal<Integer> mySlotIndex = new ThreadLocal() { protected Integer initiaValue() { return 0; } }; A...