Atomic变量是否只在其所在的缓存行上刷新缓存



我尽量使用原子变量as而不是互斥
因为Atomic变量在用户模式下工作,而互斥在内核模式下工作。所以Atomic比互斥快得多。

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

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

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

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

此外,你不应该真的从";释放高速缓存行";或者其他什么。C++内存模型应该根据其本身来读取:由于操作的顺序,哪些数据对哪些线程可见和可访问。让实现来解决细节问题。

最新更新