Hallo,
ich stehe momentan vor einem recht unschönen Problem. Dieses möchte ich kurz abstrakt darstellen.
Daten:
Nehmen wir an, ich habe eine Klasse A mit den folgenden Methoden
Public MethodeEins()
Public MethodeZwei()
Public MethodeDrei()
Anforderung:
Von der Klasse gibt es nur ein Objekt. Auf dieses Objekt kann jedoch aus mehreren Threads zugegriffen werden. Ich muss verhindern, dass irgend eine der Methoden zur gleichen Zeit doppelt läuft. Also Es dürfen weder MethodeEins und MethodeZwei, noch MethodeEins und MethodeEins durch unterschiedliche Threads aufgerufen werden.
Normale Lösung:
Ich setze in der Klasse ein Objekt Lock und schütze so mit SyncLock alle Methoden.
Zusatzbedingung:
Ich kann nicht ausschließen, dass bspw. MethodeEins im weiteren Stackverlauf doch noch MethodeDrei benötigt. Wenn also (indirekt) MethodeEins die MethodeX aufruft, soll dies möglich sein.
Problematik:
Mein SyncLock würde nun verhindern, dass MethodeDrei durch MethodeEins aufgerufen wird. Ich hätte ein schönes Deadlock.
Frage:
Gibt es ein Standardverfahren, dass es mir ermöglicht, dass sich die Methoden innerhalb eines sequenziellen Stacks (indirekt, also mit Methoden anderer Objekte dazwischen) aufrufen können, den Zugriff aus einem anderen Thread jedoch verhindern? Gewissermaßen würde ich ein Lock setzen, meinem Stack aber einen Schlüssel mitgeben, so dass der Prozess weiterhin Zugriff auf die Methoden hat .
Für Ideen und Anregungen wäre ich sehr dankbar !
ich stehe momentan vor einem recht unschönen Problem. Dieses möchte ich kurz abstrakt darstellen.
Daten:
Nehmen wir an, ich habe eine Klasse A mit den folgenden Methoden
Public MethodeEins()
Public MethodeZwei()
Public MethodeDrei()
Anforderung:
Von der Klasse gibt es nur ein Objekt. Auf dieses Objekt kann jedoch aus mehreren Threads zugegriffen werden. Ich muss verhindern, dass irgend eine der Methoden zur gleichen Zeit doppelt läuft. Also Es dürfen weder MethodeEins und MethodeZwei, noch MethodeEins und MethodeEins durch unterschiedliche Threads aufgerufen werden.
Normale Lösung:
Ich setze in der Klasse ein Objekt Lock und schütze so mit SyncLock alle Methoden.
Zusatzbedingung:
Ich kann nicht ausschließen, dass bspw. MethodeEins im weiteren Stackverlauf doch noch MethodeDrei benötigt. Wenn also (indirekt) MethodeEins die MethodeX aufruft, soll dies möglich sein.
Problematik:
Mein SyncLock würde nun verhindern, dass MethodeDrei durch MethodeEins aufgerufen wird. Ich hätte ein schönes Deadlock.
Frage:
Gibt es ein Standardverfahren, dass es mir ermöglicht, dass sich die Methoden innerhalb eines sequenziellen Stacks (indirekt, also mit Methoden anderer Objekte dazwischen) aufrufen können, den Zugriff aus einem anderen Thread jedoch verhindern? Gewissermaßen würde ich ein Lock setzen, meinem Stack aber einen Schlüssel mitgeben, so dass der Prozess weiterhin Zugriff auf die Methoden hat .
Für Ideen und Anregungen wäre ich sehr dankbar !