如何为x86类系统实现C 11内存屏障?

如何为x86类系统实现C 11内存屏障?,第1张

概述我对C 11的std :: memory_order类型有一个很好的概念性理解(轻松vs获取释放与顺序一致……),但是我想更好地理解它们通常是如何实现的(通过编译器) x86(或x86_64)目标. 具体而言,比较每个订单约束(memory_order_consume,memory_order_acquire,memory_order_release和memory_order_seq_cst)的低 我对C 11的std :: memory_order类型有一个很好的概念性理解(轻松vs获取释放与顺序一致……),但是我想更好地理解它们通常是如何实现的(通过编译器) x86(或x86_64)目标.

具体而言,比较每个订单约束(memory_order_consume,memory_order_acquire,memory_order_release和memory_order_seq_cst)的低级细节(例如用于同步处理器之间的状态或高速缓存的重要的与存储器相关的cpu指令).

请提供尽可能多的低级细节,最好是x86_64或类似架构.非常感谢您的帮助.

解决方法 在x86和x86_64上,加载具有获取语义,并且存储具有释放语义,即使不使用原子,所以除了seq_cst之外的所有内存顺序都不需要特殊指令.

为了获得完整的顺序一致性,编译器可以插入mfence指令以防止对不同内存位置上的 *** 作进行重新排序,但我认为不需要任何其他特殊指令.

编译器需要避免在原子 *** 作中移动加载和存储,但这纯粹是对编译器优化器的限制,并且不需要发出cpu指令.

有关一些好的信息,请参阅http://www.stdthread.co.uk/forum/index.php?topic=72.0.

总结

以上是内存溢出为你收集整理的如何为x86类系统实现C 11内存屏障?全部内容,希望文章能够帮你解决如何为x86类系统实现C 11内存屏障?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1215114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存