微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

解决方法

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。