因此,该文档说,运行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等进行编译。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句