我读了一篇文章,描述了 ABA 问题,但有些东西我无法理解。我有源代码,它无法工作,它与文章中的示例类似,但我不明白这个问题。这是文章
http://fara.cs.uni-potsdam.de/~jsg/nucleus/index.php?itemid=6
它说:虽然 head_ 的实际值是相同的(a)next_ 指针不是
但怎么可能呢?如果两个结构对象
struct node {
node *next;
data_type data;
};
“head_”和“current”指向内存中的同一个区域,head_->next和current->next怎么能指向不同呢?
它还说:最后一个操作, foo 的比较和交换在它不应该成功的时候成功。
那么它应该怎么做呢?加载相同的地址并重试?有什么不同?
目前在我的代码中我有类似的情况,我在对象上执行 CompareAndSwap,这可能会被另一个线程更改为具有相似地址的对象
deleted.compare_exchange_strong(head, 0);
但是如果更改的对象初始化良好并且它的下一个指针包含指向初始化对象的指针,那么问题是什么?
提前致谢。