IT用語集 › プログラミング › メモリフェンス

メモリフェンス

プログラミング Svenska → 更新: 2026-10-22

メモリ操作がその前後を越えて並べ替えられる範囲を制限する命令。コンパイラもプロセッサも、知らないうちに順序を入れ替えるため必要になる。

並べ替えはシングルスレッドでは結果が変わらず見えないが、マルチスレッドでは致命的になる。典型的なバグは、オブジェクトのフィールドが他のコアから見える前にポインタだけが公開されてしまうもので、読む側のコアは、初期化されていないオブジェクトのゴミを読むことになる。フェンスにはメモリ順序に対応した種類がある。acquireフェンスは後続の読み出しが前に移るのを防ぎ、releaseフェンスは先行する書き込みが後ろに移るのを防ぎ、フルフェンスはすべてを止める。意外な点は二つ。コンパイラによる並べ替えとハードウェアによる並べ替えは別の問題で、両方に対処しなければならない(volatileがスレッド用の道具ではない理由だ)。そしてx86は順序が強いため、誤ったコードがそこでは動き、ARMで壊れることがよくある。

← 用語集に戻る