英語版
このページの英語版を見る

core.volatile

このモジュールは、揮発性操作のためのイントリニックを宣言する。
Authors:
Walter Bright, Ernesto Castellotti

ソース core/volatile.d

nothrow @nogc @safe ubyte volatileLoad(ubyte* ptr);

nothrow @nogc @safe ushort volatileLoad(ushort* ptr);

nothrow @nogc @safe uint volatileLoad(uint* ptr);

nothrow @nogc @safe ulong volatileLoad(ulong* ptr);

nothrow @nogc @safe void volatileStore(ubyte* ptr, ubyte value);

nothrow @nogc @safe void volatileStore(ushort* ptr, ushort value);

nothrow @nogc @safe void volatileStore(uint* ptr, uint value);

nothrow @nogc @safe void volatileStore(ulong* ptr, ulong value);
ptr で示されるメモリ位置から/への値の読み書き。
これらの関数はコンパイラによって認識され、その呼び出しは削除されないことが保証されている。 削除されないことが保証されている。 または同じスレッド内で順序が入れ替わらないことが保証されている。
これらの並べ替え保証は、これらの関数を通して行われる他の操作に関してのみ行われる。 コンパイラは通常のロード/ストアを自由に並べ替えることができる。 コンパイラは、これらの関数を通して行われるロード/ストアに関して、通常のロード/ストアを自由に並べ替えることができる。
これは、メモリマップドI/O(MMIO)を扱うときに便利である。 を扱うときに便利である。 ストアが介在しない連続的なロードが ストアが介在しないシーケンシャルロードが、その場所への外部ストアに起因して、同じ場所から異なる値を取り出すことができる場合などである。
これらの関数は、可能であれば、ロードとストアを単一の操作として行う。一般的には 以下である場合に可能である。 (void*).sizeof ただし、ターゲットによってはより大きな操作をサポートする場合もある。もし が単一の操作として実行できない場合、複数の小さな操作が使用される。
これらはアトミック操作と混同してはならない。アトミック性は保証されない。 アトミック性を保証するものではない。これは、ターゲット上で使用される命令の結果として、偶然に提供されることがある。 の結果としての偶然性によって提供されるかもしれないが、ポータブル・プログラムではこれに依存すべきではない。 さらに、これらの関数はメモリ・フェンスを意味しない。 これらの関数をスレッド間の通信に使うべきではない。 書き込みサイクルや読み出しサイクルが指定されたアドレスで発生することを保証するために使用することはできる。