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_head
。 if
语句本身不保证任何原子性。
【讨论】:
以上是关于IF的原子性和以下语句的主要内容,如果未能解决你的问题,请参考以下文章