2

現在、メモリバリア、ロック、およびメモリモデルの理解を深めようとしています。

私の知る限り、4 つの異なるタイプの緩和が存在します。名前は、書き込み -> 読み取り、書き込み -> 書き込み、読み取り -> 書き込み、読み取り -> 読み取りです。x86 プロセッサでは、Total Store Order (TSO) と呼ばれることが多い Write->Read 緩和のみが可能です。パーシャル ストア オーダー (PSO) ではさらに書き込み→書き込みの緩和が可能であり、緩和ストア オーダー (RSO) では上記のすべての緩和が可能です。

さらに、解放、取得、および両方の 3 種類のメモリ バリアが存在します。ロックは、バリアの取得と解放だけを使用することも、場合によっては完全なバリア (.Net) を使用することもできます。

次の例を考えてみましょう。

// thread 0
x = 1
flag = 1

//thread 1
while (flag != 1);
print x

私の現在の理解では、このコードを TSO マシンで実行する場合、追加のメモリ バリアは必要ないことがわかります。PSO マシンの場合、フラグ =1 の場合にスレッド 1 が x の実際の値を確実に取得できるように、x=1 とフラグ = 1 の間にリリース バリアが必要です。RSO マシンの場合は、while(flag != 1); の間にさらに取得バリアが必要です。x を出力して、スレッド 1 が x の値を早期に読み取らないようにします。

私の観察は正しいですか?

4

2 に答える 2

0

あなたのコードサンプルは、この質問のコードサンプルに近いと思います

つまり、RSO については、説明したよりも多くのメモリ バリアが必要です。具体的には、たとえば、しばらく前にスレッド 1 の鮮度を保証するバリアが必要です。

私はTSOとPSOの部分について確信が持てません.これが役立つことを願っています.

于 2011-09-01T02:10:27.467 に答える