Closed Blinue closed 12 months ago
最近学习了原子操作,发现我以前有着很大误解。内存定序不影响原子对象本身,它决定了编译器和 CPU 能否对其他变量的读取或写入进行重排。比如释放操作要求该操作前的对其他变量的访问不能重排到该操作后,这就保证了释放操作执行后内存状态和代码字面上一致。
因此原子对象有两个特性:
重新检查了代码,发现对原子对象的操作全部使用 memory_order_seq_cst 定序,这没有问题,但会影响性能,因为它强制受影响的内存访问传播到每个核心。很多操作对内存定序没有要求,memory_order_relaxed 就足够了。
最近学习了原子操作,发现我以前有着很大误解。内存定序不影响原子对象本身,它决定了编译器和 CPU 能否对其他变量的读取或写入进行重排。比如释放操作要求该操作前的对其他变量的访问不能重排到该操作后,这就保证了释放操作执行后内存状态和代码字面上一致。
因此原子对象有两个特性:
重新检查了代码,发现对原子对象的操作全部使用 memory_order_seq_cst 定序,这没有问题,但会影响性能,因为它强制受影响的内存访问传播到每个核心。很多操作对内存定序没有要求,memory_order_relaxed 就足够了。