我正在尝试学习如何使用原子:)
class foo {
static std::atomic<uint32_t> count_;
uint32 increase_and_get() {
uint32 t = count_++;
return t;
}
}
函数increase_and_get()
是否是线程安全的?
答案 0 :(得分:11)
是的,它是安全的:增量是原子的,并且本地t
不能被并发线程改变。您可以进一步简化代码以完全消除临时变量:
uint32 increase_and_get() {
return count_++;
}
答案 1 :(得分:4)
是的,这将是线程安全的。当然假设std::atomic
实现中没有错误 - 但通常很难做到正确。
这正是std::atomic
的意思。