IF的原子性和下面的语句 这是A. Williams C++并发操作手册中的无锁堆栈,带有危险指针主题。假设我对它有了一个了解,除了两行之外,它们是(这里):

IF的原子性和下面的语句 这是A. Williams C++并发操作手册中的无锁堆栈,带有危险指针主题。假设我对它有了一个了解,除了两行之外,它们是(这里):,c++,multithreading,atomic,lock-free,C++,Multithreading,Atomic,Lock Free,问题是:另一个线程能否在取消引用“old\u head”指针(old\u head->data)之前删除(修改)它?逻辑上说不,因为威廉姆斯的整个代码都是错误的,但我怀疑这是否是一种原子操作。您认为呢?如果多个线程都可以使用旧头,并且引用的代码块不受任何同步机制的保护,那么可以在检查和取消引用之间修改yes旧头如果语句本身不能保证任何原子性。如果多个线程可以使用旧头,并且引用的代码块不受任何同步机制的保护,则可以在检查和取消引用之间修改yes旧头if语句本身不能保证任何原子性 // code b

问题是:另一个线程能否在取消引用“old\u head”指针(old\u head->data)之前删除(修改)它?逻辑上说不,因为威廉姆斯的整个代码都是错误的,但我怀疑这是否是一种原子操作。您认为呢?

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

如果多个线程可以使用
旧头
,并且引用的代码块不受任何同步机制的保护,则可以在检查和取消引用之间修改yes
旧头
if
语句本身不能保证任何原子性

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