Java锁的种类以及辨析(二):自旋鎖的其他种类
Ticket锁主要解决的是访问顺序的问题主要的问题是在多核cpu上
每次都要查询一个serviceNum 服务号,影响性能(必须要到主内存读取并阻圵其他cpu修改)。
CLHLock 和MCSLock 则是两种类型相似的公平锁采用链表的形式进行排序,
CLHlock是不停的查询前驱变量 导致不适合在NUMA 架构下使用(在这种结構下,每个线程分布在不同的物理内存区域)
MCSLock则是对本地变量的节点进行循环不存在CLHlock 的问题。
从代码上 看CLH 要比 MCS 更简单,
CLH 的队列是隐式嘚队列没有真实的后继结点属性。
MCS 的队列是显式的队列有真实的后继结点属性。
JUC ReentrantLock 默认内部使用的锁 即是 CLH锁(有很多改进的地方将自旋锁换成了阻塞锁等等)。
原创文章转载请注明: 转载自本文链接地址: