实用的多字比较和交换操作
在标题与此问题的标题相同的论文中,作者描述了如何仅使用单个单词CAS 来构建无阻塞 线性化 多单词CAS运算。他们首先介绍了双比较单交换操作RDCSS,如下所示: word_t RDCSS(RDCSSDescriptor_t *d) { do { r = CAS1(d->a2, d->o2, d); if (IsDescriptor(r)) Complete(r); } while (IsDescriptor(r)); if (r == d->o2) Complete(d); // !! return r; } void Complete(RDCSSDescriptor_t *d) { v = *(d->a1); if (v == d->o1) CAS1(d->a2, d, d->n2); else CAS1(d->a2, d, d->o2); } …