都说 AQS 是基于 CLH 队列实现的,但是根据我搜索的知识,CLH 和 MCS 队列的区别如下:
CLH 锁是一种基于链表的可扩展、高性能、公平的自旋锁,申请线程只在本地变量上自旋,它不断轮询前驱的状态,如果发现前驱释放了锁就结束自旋。
MCS Spinlock 是一种基于链表的可扩展、高性能、公平的自旋锁,申请线程只在本地变量上自旋,直接前驱负责通知其结束自旋,从而极大地减少了不必要的处理器缓存同步的次数,降低了总线和内存的开销。
在 AQS 的源码里面,release 方法中是当前 node 唤醒后继节点,这个难道不是 MCS 队列的实现吗