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_head
。 if
语句本身不保证任何原子性。
这是 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_head
。 if
语句本身不保证任何原子性。