IF 的原子性和下面的语句

Atomicity of IF and the following statement

这是 A. Williams C++ Concurrency in Action 一书,无锁堆栈和危险指针主题。假设我对它有所了解,除了两行,这里是(这里的source):

// code before
if (old_head) {
res.swap(old_head->data);
// code after

问题是:另一个线程能否在取消引用(old_head->数据)之前删除(修改等)"old_head" 指针?逻辑上说没有,因为整个 Williams 的代码都是错误的,但我怀疑它是否是一种原子操作。你怎么看?

如果 old_head 可用于多个线程并且引用的代码块不受任何同步机制保护,那么可以在检查和取消引用之间修改 old_headif 语句本身不保证任何原子性。