eth*_*ice 3 c++ x86 x86-64 memory-barriers c++11
我对C++ 11的std::memory_order类型有一个很好的概念性理解(轻松与获取 - 发布与顺序一致 ......),但我想更好地理解它们通常是如何为x86实现的(通过编译器)(或x86_64)目标.
具体而言,低级别的细节(例如用于处理器之间的同步状态或高速缓存存储器的重要相关的CPU指令)为每个顺序的限制进行比较(memory_order_consume,memory_order_acquire,memory_order_release,和memory_order_seq_cst).
请提供尽可能多的低级细节,最好是x86_64或类似架构.非常感谢您的帮助.
在x86和x86_64上,加载具有获取语义,并且存储具有释放语义,即使不使用原子,所以所有内存顺序除了seq_cst根本不需要特殊指令.
为了获得完整的顺序一致性,编译器可以插入mfence指令以防止对不同存储器位置上的操作进行重新排序,但我认为不需要任何其他特殊指令.
编译器需要避免在原子操作中移动加载和存储,但这纯粹是对编译器优化器的限制,并且不需要发出CPU指令.
有关一些好的信息,请参见http://www.stdthread.co.uk/forum/index.php?topic=72.0.
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |