这是A. Williams C ++ Concurrency in Action一书,带有危险指针的无锁堆栈主题。假设我对它有所了解,只有两行,这里它们是(source这里):
// code before
if (old_head) {
res.swap(old_head->data);
// code after
问题是:可以另一个线程删除(修改等)" old_head"它被解除引用之前的指针(old_head->数据)?逻辑说没有导致整个威廉姆斯'代码是错误的,但我怀疑它是否是一种原子操作。你觉得怎么样?