サンプルコード:
class Sample{
private int v;
public void setV(){
Lock a=new Lock();
a.lock();
try{
v=1;
}finally{
a.unlock();
}
}
public int getV(){
return v;
}
}
スレッドが常に getV を呼び出し、別のスレッドで setV を 1 回だけ実行した場合、その読み取りスレッドは、書き込み直後に新しい値を確認することが保証されていますか? または、「V」を揮発性または AtomicReference にする必要がありますか?
答えが「いいえ」の場合、次のように変更する必要があります。
class Sample{
private int v;
private Lock a=new Lock();
public void setV(){
a.lock();
try{
v=1;
}finally{
a.unlock();
}
}
public int getV(){
a.lock();
try{
int r=v;
}finally{
a.unlock();
}
return r;
}
}