问题在于64位加载/存储操作何时被视为原子操作。
发布于 2010-06-26 09:28:57
应用程序必须在64位操作系统上运行,并以原生64位模式运行,这样才能获得x64的优势,这是不足为奇的。如果您在32位模式下运行,无论是在32位操作系统上(使用32位应用程序),您都将获得32位原子性。如果在64位CPU上的64位操作系统上运行64位模式,您将获得64位原子性。链中的所有组件(app、OS、CPU)必须运行64位才能获得64位。
发布于 2010-06-26 09:54:51
不是默认的!但是x86下的一些SSE指令支持64位和128位的原子加载/存储,当然,您必须首先确保内存的增加。看例子:
procedure Move64(var Source, Destination);
//Move 8 bytes atomicly from Source 8-byte aligned to Destination!
asm
movq xmm0, qword [Source]
movq qword [Destination], xmm0
end;
procedure Move64(newData: pointer; newReference: cardinal; var Destination); overload;
//Move 8 bytes atomically into 8-byte Destination!
asm
movd xmm0, eax
movd xmm1, edx
punpckldq xmm0, xmm1
movq qword [Destination], xmm0
end;
procedure Move128(var Source, Destination);
//Move 16 bytes atomicly from Source to 16-byte aligned to Destination!
asm
movdqa xmm0, dqword [Source]
movdqa dqword [Destination], xmm0
end;https://stackoverflow.com/questions/3123326
复制相似问题