実用的なマルチワードの比較と交換操作
で紙この質問と同じタイトルで、著者は構築する方法について説明しノンブロッキング 線形化 マルチワード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); } ここで、RDCSSDescriptor_tは次のフィールドを持つ構造です。 …