boost无锁队列,队列解决并发安全
高合并(14 )-CLH队列锁定简介什么是CLH队列锁定CLH原理
前言
上一篇文章介绍了并发的显式锁定和内置锁定,但今天我们将介绍CLH队列锁定
CLH队列锁定CLH锁定是指Craig、Landin和andHagersten(CLH )
CLH锁定也是基于链表的可扩展性、高性能、公平的自旋锁定,线程只需要本地自旋,研究前驱节点的状态,在前驱节点解锁后结束自旋。
CLH的原理是CLH是基于链表的自旋锁,因此CLH也是链表。
如果线程需要获取锁定,则会创建新的QNode。 将QNode的locked设置为true以标识要获取锁定,调用tail的getAndSet方法以在队列末尾获取对前体节点的myPred。 然后,使前驱节点的锁定自旋,直到前驱节点的锁定被解除(锁定为假)
线程解锁时,将当前节点的锁定设置为false并回收前一个节点。 此时,节点在旋转时检测到前驱节点解锁,并获取锁定。