CodebeispielWie wird der Feldwert zwischen den Laufflächen gewaltsam synchronisiert?
public class MyClass{
private MyObject myObject;
private Object lockObject = new Object();
MyObjectFactory factory;
public MyClass(MyObjectFactory factory){
this.factory = factory;
}
public MyObject GetObject()
{
if (myObject == null){
lock(lockObject){
myObject = factory.Create();
//need forcibly sync myObject value beetween all threads here
}
}
return myObject;
}
}
Instanz von MyClass gemeinsamen beetwen mehrere Threads. Ich weiß, dass ich volatile myObject verwenden kann und es Feldwert beim Schreiben synchronisieren wird, aber ich werde auch langsam lesen. Ist es möglich, myObject Wert nur einmal in Sperrabschnitt ohne flüchtige zu synchronisieren?
Es ist interessant, Tatsache über x86/x64-Prozessoren. Ich denke, es wird eine Lösung für mich sein, weil unser Server einen x86-Prozessor verwendet. Aber ich habe theoretisches Interesse - ob es möglich ist, die Situation im Allgemeinen ohne Annahmen über die Prozessorarchitektur zu lösen? – Frank59
Mit neuen Informationen ist es eine komplette Lösung für mich. Vielen Dank! – Frank59