这个函数是否具有原子线程安全性

时间:2013-02-27 02:18:37

标签: c++ c++11 atomic

我正在尝试学习如何使用原子:)

class foo {
  static std::atomic<uint32_t> count_;
  uint32 increase_and_get() {
    uint32 t = count_++;
    return t;
  }
}

函数increase_and_get()是否是线程安全的?

2 个答案:

答案 0 :(得分:11)

是的,它是安全的:增量是原子的,并且本地t不能被并发线程改变。您可以进一步简化代码以完全消除临时变量:

uint32 increase_and_get() {
    return count_++;
}

答案 1 :(得分:4)

是的,这将是线程安全的。当然假设std::atomic实现中没有错误 - 但通常很难做到正确。

这正是std::atomic的意思。