2016-09-25 10 views
0

私は、低レベルの並行性についての基礎を学びたいと思っています。 Linuxのマニュアルから メモリバリアは特定のメモリ位置に関連していますか?

A write memory barrier gives a guarantee that all the STORE operations 
specified before the barrier will appear to happen before all the STORE 
operations specified after the barrier with respect to the other 
components of the system. 

私は「すべてSTORE操作が」1以上の特定のバリア型の複数のインスタンスがあるとバリアインスタンスとの間1:Nの関係は、おそらくそこにあることを意味しなければならないと思います格納。これについての確認をどこで見つけることができますか?

+1

これは、ストアバリアの後の読み取り操作では見えない書き込み操作の並べ替えがないことを意味します。そのような障壁が単純なコード例にマッピングされているJavaメモリモデルのクックブックを見てください。http://gee.cs.oswego.edu/dl/jmm/cookbook.html –

答えて

1

メモリバリアは、特定のメモリの場所に関連していません。

"メモリアドレスに書き込むxは、アドレスyに書き込みを行う前に実行する必要があります"ではなく、命令の実行順序に関するものです。

x = 2 
y = 1 

プロセッサが決めることができるプログラムのために:「私は2が最終的にXに保存されますまで、x = 2がまだ進行中である一方で、私はyに1を書き始めることができます待ちたくない」(また、OUT-として知られています他のコア上の読者は反直感的な振る舞いである1でyを観測した後にx(初期値)で0を観測するかもしれない。

2つの店舗の間に書込み障壁を置くと、読者は2番目の店舗の結果を観察すると最初の店舗も発生していることを確信できます。したがって、彼はy == 1を読み取るとx == 2(読み込みが順不同で実行できるので、読み込みの障壁が必要なので、それは簡単ではありません)。換言すれば、このようなバリアはを実行することを禁止し、x = 2は終了しない。

@RafaelWinterhalterが述べたように、バリアントが実際のコードにどのようにマップされているかについての具体的な例がたくさんあるJVMコンパイラライターにとっては、awesome guideがあります。

追加情報として、Preshing blogを参照してください。低レベルの並行性に関する記事が多数あります。 this one about barriers

関連する問題