Я прочитал одну статью, описывающую проблему ABA, но есть кое-что, чего я не могу понять.У меня есть исходный код, который не работает, и это похоже на пример в статье, но я не понимаю проблему.Вот статья
http://fara.cs.uni -potsdam.de / ~ jsg / nucleus / index.php? Itemid = 6
В ней говорится: пока фактическое значениеhead_ то же самое (а) указатель next_ НЕ
Но как это может быть?Если два структурных объекта
struct node {
node *next;
data_type data;
};
"head_" и "current" указывают на одну и ту же область в памяти, как может head _-> next и current-> next указать на другую?
Itтакже говорит: последняя операция, сравнивать и менять foo, УСПЕШНО, когда это не должно.
Тогда что он должен делать?Загрузить тот же адрес и попробовать еще раз?В чем разница?
В настоящее время в моем коде у меня похожая ситуация, когда я выполняю CompareAndSwap для объекта, который может быть изменен другим потоком на объект с аналогичным адресом
deleted.compare_exchange_strong(head, 0);
но если измененный объект хорошо инициализирован и его следующий указатель содержит указатель на инициализированный объект, то в чем проблема?
Заранее спасибо.