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