タグ

Javaとvolatileに関するnikuyoshiのブックマーク (2)

  • volatile修飾子 | Javaコード入門

    フィールド値のキャッシュを抑制する – volatile修飾子 マルチスレッド環境では、性能の向上を図るために、それぞれのスレッドがフィールド値を個別にキャッシュすることがあります。スレッドが元のメモリーを読み書きする手間を省くことで、性能の向上を図っているわけです。 ただし、これはスレッドによって同じフィールドの参照値が異なる危険との背中合わせでもあります。もしも値の不整合を回避したいという場合には、volatile修飾子を付与することで、フィールド値のキャッシュを抑制できます。 別解として該当するフィールドを操作している箇所を、synchronizedブロック(修飾子)で表すことも可能です。synchronizedブロック配下で扱うフィールド値は、かならず元のメモリー上から読み込まれ、書き戻されますので、キャッシュによる不整合を回避できます。 ただし、簡単な値の読み書き操作で、sync

  • volatileで最適化を抑制する - 職業としてのプログラミング

    C言語やC++,Javaにはvolatileという修飾子があります。組み込み系ソフトウェアやマルチスレッドのアプリケーションを書いている方にとっては、なじみ深い存在ですが、そうでない方にはあまり縁がないのかもしれません。しかし、volatileの使い方や存在意義を知らないままコーディングを行うと、思わぬバグを引き起こす場合があります。今回は、そのvolatileキーワードについて簡単に説明したいと思います。 volatileは初期のCであるK&Rには含まれていませんでしたが、ANSI C(C89)以降のC標準規格にはconstと一緒に含まれるようになりました(constとvolatileをあわせてcv修飾子と呼ぶこともあります)。一般的なCなら必ず備えている修飾子です。 volatile修飾子の意味ですが、「プログラミング言語C ANSI規格準拠」によると、 volatileの目的は,黙っ

  • 1