是否可以使用volatile變量來允許一致的只寫同步?是否可以使用volatile變量來允許一致的只寫同步?
這是代碼:
public class Controller {
Container cont = new Container();
...
public Object get(){
if(!cont.isLocked()){
return cont.getObject(); //many threads can read at the same time
}
else synchronized(cont){
return cont.getObject(); //threads wait until write is finished
}
}
public void set(Object o){
synchronized(cont){
cont.lock();
cont.setObject(o);
cont.unlock();
}
}
}
public class Container {
private volatile boolean lock = false;
private Object data;
public Container(){
}
public void lock() {
lock = true;
}
public void unlock() {
lock = false;
}
public boolean isLocked() {
return lock;
}
public void setObject(Object o) {
data = o;
}
public Object getObject() {
return data;
}
}
一下行不行,還是會打破它,你覺得呢?
這對我來說很好。但是如果你想確定,你可以通過在'setObject'和'getObject'中引入延遲來測試它。再加上一些明智的調試信息。 +1生產SSCCE。 –