9

同期変数と揮発変数が Java でどのように機能するかを調べていますが、 read and write barrier という概念に出会いました。この用語の意味を理解するのを手伝ってくれる人はいますか

4

4 に答える 4

7

(上記の回答は完全です)、単純なスキームで概念を実証したいだけです

 Thread 1                                                             Thread 2


   |          
   |                                                                      
   |                                                                      |
   |                                                                      |
   |  Everything Thread 1                                                 |
   |   wrote before here                                                  |
   |                                                                      |
   |                                                                      |
    _ _ _ _ _ _ _ _ _ _                                                   |
      ( write  barrier)         (happens before)         (read barrier)   |
   |                                                     _ _  _ _ _ _ _ _  
   |
   |                                                   is guaranteed      |
   |                                                  to be visible to    |
   |                                                  Thread 2            |
   |                                                                      |
于 2013-08-28T11:10:07.820 に答える
0

読み取りバリアと書き込みバリアは、JVM によって最下位レベルで Java メモリ モデルのセマンティクスを実装するために使用されます。

ただし、Java 言語仕様にはその用語がなく、先行発生関係の観点からのみ説明されています。特に

  • 揮発性変数への書き込みは、その同じ変数の後続の読み取りの前に発生します
  • 同期ブロックの終了は、同じ同期ブロックの後続のエントリの前に発生します

プログラム内の 2 つのアクション間に先行発生関係が存在する場合、それらの 2 つのアクションが一貫した順序で実行されることが保証されます (つまり、スレッドが 1 つしかなく、直感的でない再順序付けがないかのように)。

正しいマルチスレッド プログラムを作成するために、JVM の実装の詳細を掘り下げる必要はありません。ただし、詳細な情報が必要な場合は、JSR-133 クックブックをお読みください。

于 2013-08-28T11:06:12.770 に答える