led*_*kol 2 c++ multithreading nonblocking compare-and-swap
我读了一篇文章,描述了ABA问题,但有些东西,我无法理解.我有源代码,它无法工作,它类似于文章中的示例,但我不明白这个问题.这是文章
http://fara.cs.uni-potsdam.de/~jsg/nucleus/index.php?itemid=6
它说:虽然head_的实际值是相同的(a)next_指针是NOT
但它怎么可能呢?如果是两个结构对象
struct node {
node *next;
data_type data;
};
Run Code Online (Sandbox Code Playgroud)
"head_"和"current"指向内存中的同一区域,如何头_-> next和current-> next指向不同?
它还说:最后一个操作,foo SUCCEEDS的比较和交换,它不应该.
那该怎么办?加载相同的地址,然后重试?有什么不同?
目前在我的代码中我有类似的情况,我在对象上做CompareAndSwap,可能会被另一个线程更改为具有类似地址的对象
deleted.compare_exchange_strong(head, 0);
Run Code Online (Sandbox Code Playgroud)
但是如果更改的对象被初始化很好并且它的下一个指针包含指向初始化对象的指针那么问题是什么?
提前致谢.
"head_"和"current"指向内存中的同一区域,如何头_-> next和current-> next指向不同?
他们不; 但代码需要这两个head和head->next是稳定的,而pop方法运行-但CAS既保证了本作head.它默默地假定head->next在没有改变的情况下不会改变head,这是错误的.所以它会读取一些东西,current->next不久之后,它会发生变化.
它还说:最后一个操作,foo SUCCEEDS的比较和交换,它不应该.
那该怎么办?加载相同的地址,然后重试?有什么不同?
是.该方法需要等待(或继续尝试),直到没有人混淆其手下的结构.
但是如果更改的对象被初始化很好并且它的下一个指针包含指向初始化对象的指针那么问题是什么?
可能是什么.违反类的不变量,双重释放/内存泄漏,数据丢失等