ABA問題についての記事を読んだのですが、理解できないことがあります。私はソースコードを持っていますが、それは機能せず、記事の例に似ていますが、問題を理解していません。これが記事です
http://fara.cs.uni-potsdam.de/~jsg/nucleus/index.php?itemid=6
それは言う:head_の実際の値は同じですが(a)next_ポインタはそうではありません
しかし、どうしてそれができるのでしょうか?2つの構造オブジェクトの場合
struct node {
node *next;
data_type data;
};
「head_」と「current」はメモリ内の同じ領域を指しますが、head _->nextとcurrent->nextはどのように異なるポイントを指すことができますか?
また、次のようにも述べています。最後の操作であるfooによるコンペアアンドスワップは、成功すべきではない場合に成功します。
それでは、それは何をすべきでしょうか?同じアドレスをロードして再試行しますか?違いはなんですか?
現在、私のコードでは、オブジェクトに対してCompareAndSwapを実行するという同様の状況があります。これは、別のスレッドによって、同様のアドレスを持つオブジェクトに変更される可能性があります。
deleted.compare_exchange_strong(head, 0);
しかし、変更されたオブジェクトが適切に初期化されており、その次のポインターに初期化されたオブジェクトへのポインターが含まれている場合、問題は何ですか?
前もって感謝します。