#define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction()
メモリバリアは, コンパイラによる読込と書込の順序変更や, マルチコアCPUによる順序違いを防ぐための設計である.
典型的なパターンとして, スレッドAがあるデータとフラグを書き込み, スレッドBがフラグとデータを読み込むとする. この場合, releasebバリアをデータとフラグの書き込みの間に挿入すると, データの書き込みの完了がフラグの書き込みよりも後にならないことを保証できる. そして, acquireバリアをフラグとデータの読み込みの間に挿入すると, フラグを読み込んだ後にデータを読み込むことを保証できる.
このパターンでは, releaseバリアとacquireバリアが対になり, 1つのフラグ変数でデータの読み込み/書き込みを制御する必要がある.
このセマンティクスのさらに詳しい情報はこのblogの投稿を参照すること: http://preshing.com/20120913/acquire-and-release-semantics
このマクロ版は, 可能ならばSDLはコンパイラの組み込み命令やインラインアセンブリを使用するが, 一部の環境では負荷の高い関数版のSDL_MemoryBarrierReleaseFunctionを呼ぶ場合がある. 使用できる場合は, アプリケーションは関数版よりもマクロ版を優先するべきである.