https://www.cnblogs.com/zhao-zongsheng/p/9092520.html
atomic 可以保证对 atomic 变量的可见性。但想知道,一个线程先修改了 一个普通变量,再修改了 一个 atomic 变量,是否也可以保证 别的线程可见这个普通变量的修改?
1
teawithlife 134 天前
atomic 没有保证“可见性”这一说法,保证的是操作的原子性
另外文章中已经多次提到,在保证输入输出一致的情况下,C++编译器可以自行优化语句的执行顺序,因此你说的 atomic 变量和普通变量,哪个先改变是无法保证的,所以无法实现你说的“同步”效果 |
2
sryanyuan 134 天前
需要依赖对应原子变量。
需要在线程 1 中使用 memory_order_release 来写原子变量,线程 2 中对于对应的原子变量使用 acquire,假设发现变更了,则即可对线程 1 中修改的普通变量可见 |
![]() |
3
Akiyu 134 天前
看起来你说的是 memory order.
https://en.cppreference.com/w/cpp/atomic/memory_order https://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync 你不指定任何参数, 默认类型为 Sequentially Consistent . 无论是普通变量, 还是 atomic 类型都是同步的. 这无需担心. |
4
fakeshadow 134 天前
原子操作的顺序可以控制内存顺序 /屏障。如果一致性要求高并且不熟悉原子操作请尽量使用 seqcst 。
|
![]() |
5
Akiyu 134 天前
|
![]() |
6
dangyuluo 134 天前
这不就是我前段时间纠结过的 Memory order 么😂
|