Javaのvolatileキーワードによるスレッド間可視性の制御
volatileキーワードは、主に複数スレッド間でのデータ可視性を確保するために使用されます。
異なるスレッドが同じオブジェクトを操作する際、各スレッドはまずオブジェクトのコピーを自身の作業メモリに保持し、処理後にメインメモリに戻します。
複数スレッドが同時にオブジェクトを操作する場合、実際にはそれぞれがメインメモリから取得したコピーを操作しているため ...
6月28日 18:29 投稿
シングルトンパターンの実装方法の比較
遅延初期化(Lazy Initialization):
1. 一回限りの唯一のインスタンスを取得します。
public class Singleton {
private static Singleton instanceRef;
private Singleton() {}
public static Singleton getInstance() {
if (instanceRef == null) {
instanceRef = new Singleton();
}
return instanceRef;
}
} ...
6月2日 16:38 投稿
C++におけるマルチスレッド処理とstd::async、std::future、std::atomic、volatileの使用法
C++標準ライブラリはスレッド操作を包括的にサポートしており、特にstd::threadやstd::asyncが頻繁に利用されます。『Effective Modern C++』では、スレッドのネイティブなローカル処理が必要でない限り、タスクベースのプログラミングを推奨しており、std::asyncの使用が望ましいとされています。本記事では、std::asyncを中心にその仕組みと使用法を解説します。
std::as ...
5月30日 14:48 投稿
Java 並行処理におけるスレッドセーフティと同期機構の深層分析
1. volatile キーワードによるメモリモデル制御
volatile はマルチスレッド環境下において、共有変数の「可視性」を担保するための専用修飾子です。ある変数を volatile として宣言した場合、各スレッドはこの変数にアクセスする際にキャッシュされた値ではなく、最新の値を必ずメインメモリから読み取るよう強制されます。これにより、一方のスレッドが変更を加えた際、 ...
5月19日 03:48 投稿
Javaにおける揮発性変数の動作原理と応用
揮発性修飾子の基本特性
volatile修飾子が適用された共有変数(クラスメンバ変数、静的メンバ変数)は次の特性を獲得します:
異なるスレッド間での可視性の保証(変数変更が即時に他スレッドに反映)
命令の再順序付けの禁止
原子性(atomicity)は保証しない
※ synchronizedとLockは可視性・順序性・原子性の全てを保証
メモリ可視性のメカニズム
Javaメモリモデルに ...
5月16日 09:30 投稿