ABA問題
他には、ハザードポインタを用いる方法がある。これはリストにはない箇所を示すポインタである。ハザードポインタは変更中の状態を表現し、後でデータを同期する必要があることを示す[Doug Lea]。
アーキテクチャによってはもっと大きなアトミック操作を可能にするものがある。たとえば、二重リンクリストをアトミックに更新できるものもある。
また、アーキテクチャによってはLoad-Link/Store-Conditional命令を提供しているものがあり、これはアドレスの示す箇所に他のストアが行われない場合に限りストアを実行するというものである。記憶域がある値を持っていることと、記憶域が変化したことという二つの概念をうまく分離することができる。DEC Alpha や PowerPC がこの命令をサポートしている。
P 2 {\displaystyle P_{2}} は、共有メモリの値 A を値 B に書き換え、さらにプリエンプションの前に A に書き戻す
P 1 {\displaystyle P_{1}} は実行を再開し、共有メモリの値が変更していないことを確認して実行を継続する
P 1 {\displaystyle P_{1}} は実行を継続するが、共有メモリの変更が分からなかったことにより、誤った振る舞いをする可能性がある。
ABA問題に遭遇する一般的なケースとして、ロックフリーのデータ構造を実現する場合がある。ある要素がリストから削除され、解放された後、新しい要素が割り当てられて、リストに追加されると、新規に割り当てられた要素と、削除された要素がメモリ管理上の最適化によって同じものになることがよくある。新しい要素のポインタは古いものと同一になり、ここで ABA 問題を生じる。