Win32 API - 同期用マクロ

Synchronization Macros
を見ると、MemoryBarrier()という関数(マクロ)があります。必要な環境としては、"Requires Windows Server 2003"なんて書かれています。また、"WinNT.h"で定義されているとありますが、Visual Studio 6 SP6(以下VS6)やVisual Studio .NET 2003(以下VS2003)に付属の"WinNT.h"では定義されていません。Microsoft Platform SDK(以下、SDK)付属の"WinNT.h"の中にはMemoryBarrier()があります。PreFetchCacheLine()、YieldProcessor()も同じです。
Windows 2003 Serverでしか使えないようにしているのは、まあ、いいとして、なんで"WinNT.h"に書かれていたり書かれていなかったりと、まちまちなのか。
僕の手元の"WinNT.h"のビルド番号を見ると、

VS6: Build 0095
VS2003: Build 0081
SDK: Build 0092

となっています。SDKの"WinNT.h"のヴァージョンが新しいから、というのでもなさそうです。謎です。
とはいえ、VS2003でなければ使えない_ReadWriteBarrier()と違って古いコンパイラーでも使えるというのはありがたいです。まあ、x86ではあまりメモリバリアーの意味はないという話ですし、x86用のMemoryBarrier()も無駄コードを埋め込んでいるだけに見えます。最適化の抑止のためってところでしょうか? 機械語やCPUの動作に詳しい人が見ると面白いコードなのかな?なんてふうに考えもしますが、僕にはアセンブラやCPUの知識はちょっとしかないので、情けない話よくわかりません。とまれ、無いよりはある方が良いと思います。きっと。