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 に答える