原子变量刷新是否仅在它所在的缓存行上缓存?

问题描述

我尽量使用原子变量而不是互斥锁。
因为原子变量作用于用户态,而互斥体作用于内核态,所以原子性比互斥体快得多。

但是我对原子变量有疑问。
原子变量是否获取,只释放它所在的缓存行。
如果是对的,要释放所有缓存行,我应该使用互斥锁吗???

解决方法

对原子对象本身的所有操作都是原子的:所有线程(针对特定原子对象)的所有修改都有一个单一的顺序。因此,获取/释放内容是关于修改 other 内存相对于原子变量的某些修改的可见性(尽管 memory_order_relaxed 也会影响对该原子对象的操作如何与该对象上的其他操作相关联)原子对象)。

例如,如果一个线程将一些数据设置为一个值,然后将一个原子变量设置为某个商定的值,如果另一个线程看到具有该值的原子变量,则正确使用原子读/写允许其他线程安全地访问设置原子变量的线程设置的其他数据。

因此这些标志适用于进程中可能的所有内存操作。

此外,您不应该真正从“释放缓存行”或其他方面考虑它。 C++ 内存模型应该根据它本身来读取:由于什么操作顺序,哪些数据是可见的,哪些线程可以访问。让实现来解决细节。