マルチスレッドコードで問題を引き起こすABA問題の実例を探しています。
ABA問題は、アトミックなコンペアアンドスワップ命令を実行するときに並行コードで発生します。コンペアアンドスワップを実行する直前にスレッドが中断された場合、2番目のスレッドは、コンペアアンドスワップのターゲットを初期値Aから別の値Bに変更する可能性があります。その後、値をAに戻します。最初のスレッドが再開する前に、ターゲット値が変更されても、コンペアアンドスワップは成功します。
多くの場合、ABAは問題ではありません。共有参照カウントを例にとると、refcountが同時に変更されても、すでに0に低下したrefcountから増加しない限り、問題はありません。したがって、ターゲットがターゲットと一致するかどうかにのみ関心があることは明らかです。スワップ時の期待値であり、過去に変更されたかどうかではありません。
ウィキペディアのページには、ABAに悩まされているロックフリースタック実装の例がありますが、私は個人的にこれまでのところ本番コードで問題に遭遇していません。誰かがABAについて共有するいくつかの素晴らしい戦争の話を持っているかどうか私はちょうど興味がありました。