4

Microsoft のドキュメントによると、InterlockedCompareExchange64 は、Windows Vista までは Windows API 呼び出しとして使用できません。http://msdn.microsoft.com/en-us/library/windows/desktop/ms683562(v=vs.85).aspxを参照してください。

ただし、Pentium 以上のプロセッサを使用している限り、_InterlockedCompareExchange64 コンパイラ組み込み関数を Windows XP で使用できるようです: http://msdn.microsoft.com/en-us/library/ttk2z1ws(VS.80)。 aspx

これは正しいです?そこに落とし穴はありますか?

4

1 に答える 1

3

ドキュメントは非常に一貫しています。API 関数は Vista または Server 2003 以降で使用できますが、組み込み (外部 API は不要) を使用する場合は、MS コンパイラが特定の CPU 命令を介して関数を実装します (備考を参照)。

_InterlockedCompareExchange64 はcmpxchg8b命令を使用するため、486 などの Pentium より前のプロセッサでは使用できません。

この命令は、非常に古い CPU では問題になる可能性があることに注意してください。これは、アプリを 486 プロセッサで実行すると、このコードに出くわすとすぐにクラッシュすることを意味します。

于 2011-10-03T14:15:56.343 に答える