【问题标题】:Atomicity of IF and the following statementIF的原子性和以下语句
【发布时间】: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”指针吗?逻辑上说没有因为整个威廉姆斯的代码是错误的,但我怀疑它是否是一种原子操作。你怎么看?

【问题讨论】:

标签: c++ multithreading atomic lock-free


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2016-03-02
    • 2016-02-29
    相关资源
    最近更新 更多