atomic_int 和 int 有什么区别? [复制]

What is the difference between atomic_int and int? [duplicate]

提问人:f1msch 提问时间:6/14/2022 最后编辑:Peter Cordesf1msch 更新时间:6/15/2022 访问量:1970

问:

当只在线程之间的关键部分写入和读取 int 时,线程不是安全的吗? 那么atomic_int和int有什么区别呢? “int”不是原子的吗?

C++ C++11 原子 stdatomic

评论

0赞 Peter Cordes 6/14/2022
还相关:为什么在 x86 上对自然对齐的可变原子上分配整数?另一个紧密的重复:atomic 和 int 之间的区别,这应该出现在您的搜索中。
1赞 Peter Cordes 6/14/2022
如果你只在关键部分读/写一些东西,它不需要是原子的。您可以互斥锁定,因此可见的临时步骤数量无关紧要。
0赞 Peter Cordes 6/14/2022
也相关,或者很好的重复:std::atomic到底是什么?
1赞 Daniel Langr 6/14/2022
除了原子性之外,原子类型还允许您控制内存操作的顺序,这可能至关重要。例如,尽管写入与指令对齐在 x64 上是原子的,但 ,编译器通常会生成,这要归功于默认的顺序一致性排序要求。现场演示:godbolt.org/z/joGaozPE7intmovatomic_intxchg
0赞 user17732522 6/15/2022
"'int'不是原子的吗?“:(和类型)是唯一的原子类型。没有其他类型是原子的。但链接的重复项更详细地解释了这一点。std::atomicstd::atomic_*

答:

2赞 Caleth 6/14/2022 #1

标准保证 A 完全没有数据竞争。您不需要使用关键部分来保护它。std::atomic_int

如果你不会与数据竞争(例如在关键部分,有一个锁,所有访问变量都尊重),那么你就不会使用任何一个。intstd::atomic_int

仅当您想访问一个没有互斥锁或其他同步的共享变量时,您才需要一次提供 1 个线程的独占所有权。std::atomic<T>

评论

0赞 f1msch 6/15/2022
但是没有锁的写/读不是原子本身吗?如果不考虑内存顺序或问题。inti++