繁体   English   中英

对于64位Windows上的32位应用程序,是64位操作是原子操作

[英]Are 64 bit operations atomic for a 32 bit app on 64 bit Windows

因此,该文档说,运行64位Windows可以为您提供64位原子性: http : //msdn.microsoft.com/zh-cn/library/windows/desktop/ms684122%28v=vs.85%29.aspx

这篇文章表明您必须运行64位应用程序才能获得64位原子性: 32/64位的原子

我正在开发Win32控制台应用程序。 因此,如果我理解正确,我必须使用32位类型来获得原子性,对吗? 我不能假设64位类型具有原子写入/读取?

在64位应用程序中,因为编译器可以利用具有原子64位读/写操作的x64扩展指令集,所以64位读/写操作可以是自动的。

另一方面,在64位操作系统和硬件上的32位代码中,如果应用需要读取/写入64位数据,则​​没有可用的64位读取/写入指令,因此编译器必须生成(至少)两次读/写操作。 因为操作系统可以抢先两次读/写之间的过程,所以您应该使用Interlockedxxx API。

注意:如果需要, 可以构建64位Win32控制台应用程序 在这种情况下,编译器可以生成使用64位读/写操作的代码。

当然,由于您的代码可能想要读取/写入大于64位的数据类型(例如SSE2 / 3,AVX等),因此需要多个读取/写入操作,因此,您应该采用适当的内在函数来确保所需的操作是原子的。

我建议您不要使用编译器为特定情况做正确的事情,而是建议使用必要的API和内在函数来明确声明哪些操作必须是原子操作。 这样,您就不必关心代码是否针对x64,x64,ARM,MIPS等进行编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM