:原子の読み取りとアトミック書き込みを確実にする方法は?私は次のように原子が整数(int型ではない)と、他の人に読み込み、アトミック書き込みたい
volatile Double a; // not double
volatile Long b; // not long
Integer c; // not int
Boolean d; // not boolean
ない場合、どのように私は彼らがアトミックになるだろうか?
編集:説明として、私は読み書きを組み合わせたアトミックな操作は必要ありません。私は原子となるように読みとり、原子は別々に書くことが必要です。
EDIT2:@Peter Lawrey、@PeterLawreyは、これは皮肉である:ここでは Double a; a = 0.5d;
a
を基準であるため、書き込みがアトミックです。この中で double a; a = 0.5d;
の書き込みはアトミックであることは保証されません。さらにDouble
はdouble
をラップします。もちろん、アトミックに読み書きされた参照を持つ任意のオブジェクトのラップされた内容にも同じことが適用されるとは思っていません。
Edit3:元々、アトミック性がスレッド間の一貫性を保証すると思っていました。私はそうではなく、あなたはまだボラティリティが必要であることを発見しました。
いいえ私はちょうど原子読み取りを意味しました。そして原子書き込み。彼らは一緒にいる必要はありません。 – H2ONaCl
すべての参照アクセスはアトミックです。アトミックであることが保証されていない唯一のアクセスは、「double」または「long」への不揮発性アクセスです。 –
編集2を参照してください。 – H2ONaCl