目次 - SDL 3.0 API(機能別) - アトミック操作 - SDL_MemoryBarrierRelease

SDL_MemoryBarrierRelease

メモリreleaseバリアを挿入する(マクロ版)

ヘッダ

SDL3/SDL_atomic.h

構文

#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を呼ぶ場合がある. 使用できる場合は, アプリケーションは関数版よりもマクロ版を優先するべきである.

スレッドセーフ

このマクロはどのスレッドでも安全に使用できるのは明らかだが, これが必要な場合は恐らく慎重さを要するコードを扱っている. 注意すること!

バージョン

SDL 3.2.0以降

関連項目

SDL Wikiへのリンク

SDL_MemoryBarrierRelease - SDL Wiki