栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

内存屏障和Linux上的atomic_t

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

内存屏障和Linux上的atomic_t

32位x86处理器不能为64位类型提供简单的原子读取操作。在此类处理“普通”寄存器的CPU上,对64位类型唯一的原子操作是

LOCKCMPXCHG8B
,这就是为什么在此使用它的原因。另一种选择是使用
MOVQ
和MMX /
XMM寄存器,但是这需要了解FPU状态/寄存器,并且需要使用MMX / XMM指令完成对该值的所有操作。

在64位x86_64处理器上,对64位类型的对齐读取是原子的,并且可以通过一条

MOV
指令完成,因此仅需要进行普通读取—
的使用
volatile
只是为了确保编译器实际进行读取,并且不缓存先前的值。

至于读取顺序,您引用的内联汇编程序可确保编译器以正确的顺序发出指令,这是x86 / x86_64
CPU所需要的,只要写入顺序正确即可。

LOCK
ed在x86上的写入具有总顺序;普通
MOV
写提供了“因果一致性”,因此,如果线程A做到了,
x=1
那么
y=2
如果线程B进行了读取,
y==2
则随后的读取
x
将看到
x==1

在IA-64中,的PowerPC,SPARC,和具有更宽松的存储器模型其它处理器很可能有更多的

atomic64_read()
barrier()



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387295.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号