6

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

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

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

4

2 回答 2

12

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

uint32 increase_and_get() {
    return count_++;
}
于 2013-02-27T02:21:00.407 回答
5

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

这正是我们std::atomic应该做的。

于 2013-02-27T02:22:37.870 回答