これは単純な問題ですが、なぜメモリバリアが必要なのかを読んだ後、私はそれについて非常に混乱しています。
以下の例では、さまざまなスレッドが Increment と Counter を繰り返し呼び出していると想定しています。
class Foo{
int _counter=0;
public int Counter
{
get { return _counter; }
}
public void Increment()
{
Interlocked.Increment(ref _counter);
}
}
誤解していたらごめんなさいなぜメモリバリアが必要なのですか? しかし、_counter の値を読み取るときに、上記のクラスが鮮度を保証していない可能性があることを示唆しているようです。Counter プロパティに繰り返しアクセスしているスレッドは、Counter の古い値で永遠に動かなくなる可能性があります (レジスタにキャッシュされているため)。
必要になる前にメモリバリアまたはロックはreturn _counter;
ありますか?