IF的原子性和以下语句

Posted

技术标签:

【中文标题】IF的原子性和以下语句【英文标题】:Atomicity of IF and the following statement 【发布时间】:2016-12-03 07:32:44 【问题描述】:

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

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

问题是:另一个线程可以在取消引用(old_head->data)之前删除(修改等)“old_head”指针吗?逻辑上说没有因为整个威廉姆斯的代码是错误的,但我怀疑它是否是一种原子操作。你怎么看?

【问题讨论】:

preshing.com/20120612/an-introduction-to-lock-free-programming 【参考方案1】:

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

【讨论】:

以上是关于IF的原子性和以下语句的主要内容,如果未能解决你的问题,请参考以下文章

原子性和原子性操作

JAVA的原子性和可见性,线程同步的理解

volatile关键字原子性和可见性

原子性内存可见性和重排序——重新认识synchronized和volatile

事务四大特征:原子性,一致性,隔离性和持久性(ACID)

理解事务(ACID)——原子性一致性隔离性和持久性