- PR -

Singletonクラスについて

投稿者投稿内容
みたらいなおゆき
会議室デビュー日: 2003/03/19
投稿数: 4
投稿日時: 2003-04-11 00:32
引用:

みたらいなおゆきさんの書き込み (2003-04-11 00:27) より:

「Effective Java」の項目48「共有された可変データへのアクセスを同期する」を読んだ
ところでは、自スレッドで行った属性の状態変化を他スレッドに(あるいは逆に他スレッド
で行われた属性の状態変化を自スレッドに)確実に反映させるためには、
状態を変化させるタイミングで同期をとらざるを得ないように思うのです…。




補足すると、例えばオブジェクトAをスレッド1とスレッド2で共有している状態で、

 一、スレッド1がオブジェクトAのフィールドXの値を1に変更
 二、スレッド2がオブジェクトAのフィールドXの値を2に変更
 三、スレッド1がオブジェクトAのフィールドXの値を読み出す

といった順序で処理が実行された場合、たとえXがatomicに操作可能なフィールドであっても
(同期なしだと)三の操作の結果2が得られる保証はない(また逆に1が得られる保証もない)
ということです。

(これはいわゆるrace conditionの問題とは別でJavaのメモリモデルに起因するものです)
へげもん
ベテラン
会議室デビュー日: 2002/04/14
投稿数: 87
お住まい・勤務地: 埼玉県
投稿日時: 2003-04-11 10:45
みたらいなおゆき さん:

確かに、最低限volatileは必要ですね。
どうも、スレッドごとに持つ値のコピーのことを、Javaコンパイラが任意に行う最適化だと勘違いしていたようです。
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2003-04-11 13:36
>確かに、最低限volatileは必要ですね。
常に最新情報が必要な場合は,だと思いますがね.

もう一つ問題なのは,それを「同期」と呼ぶかということ.
どちらかというと「非同期の処理」ではないですかね?

スキルアップ/キャリアアップ(JOB@IT)