[英]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.