Ich habe gerade folgendes Problem, dass sich in meinem Kopf nicht so recht lösen lässt.
Ich habe folgende Klasse, die den Zugriff auf eine Ressource steuert:
Ich habe folgende Klasse, die den Zugriff auf eine Ressource steuert:
Java:
public class ResourceAccess{
public Result accessData1(Object objs...){
if(closing) waitForCloseBeeingDone();
operating = true;
openIfClosed();
Result r = doStuff(objs);
operating = false;
return r;
}
public Result accessData2(Object objs...){
if(closing) waitForCloseBeeingDone();
operating = true;
openIfClosed();
doOtherStuff(objs);
operating = false;
}
public void close(){
if(operating) waitForOperationBeeingDone()
closing = true;
closeResource();
closing = false;
}
}[/Java]
Die Problematik ist folgende: Verschiedene Threads greifen auf die Methoden accessDataX zu, und sollen diese auch parallel benutzen. Nun wird ab und zu close() Aufgerufen. Dies soll die Ressource schließen und die nächste Operation soll sie wieder öffnen, damit weitergearbeitet werden kann. Das Schließen der Ressource soll aber nicht in einer laufenden Operation passieren und umgekehrt soll keine Operation den Close-Vorgang "unterbrechen" (Dieses Verhalten habe ich mit den Variablen "operating" und "closing" angedeutet).
Auf der Suche nach einer Lösung bin ich über das ReentrantReadWriteLock gestolpert. Allerdings wüsste ich gerade nicht, wie ich es auf mein Problem anwenden sollte.
Hat da jemand eine Idee? Ist ReentrantReadWriteLock überhaupt der richtige Ansatz!? Wie würdet ihr eine solche Situation lösen!?