CORBA parallel auf beschränkten Ressourcen?

Hallo,

ich hab da - schon wieder - ein Problem, bzw. eine Frage.

Es geht um folgendes:
Ich habe einen CORBA-Server (ORBacus 4.3.0, C++) programmiert. Dieser Server muss dabei ständig auf Ressourcen zugreifen, die immer nur einen Leser gleichzeitig erlauben (z.B. Dateien auslesen).

Wenn ich das richtig verstanden habe, bringt CORBA Parallelität für Clients schon mit.

Da ist das Chaos ja dann programmiert: 2 Clients verbinden sich, rufen die gleiche Funktion auf und liefern Müll oder Fehler, weil die Funktionen gleichzeitig aus der Datei gelesen haben.

Wie kann ich das verhindern?
Mein erster Gedanke war, das Singleton-Pattern auf die „DateiLeser-Klasse“ anzuwenden (=> keine zwei Leser-Objekte) und die Anfragen in eine Queue zu stecken (=> keine zwei gleichzeitigen Lese-Aufrufe).
Da ich aber inkompetenterweise keine Beschreibung dieser ORB-Parallelität gefunden hab :frowning:, stell ich mir das in etwa wie ein Unix-fork vor. Dabei würde dann aber der gesamte Prozess kopiert, d.h. das Singleton-Muster würd nicht mehr greifen - und schon bin ich wieder beim Ursprungsproblem.

Wär wirklich toll, wenn da jemand einen Vorschlag hat! :smile:

kvida

Soweit ich weiß werden die entsprechenden Implementierungen der idl’s wirklich kopiert. Andere Klassen, also auch deine Dateizugriffsklasse mit Singleton jedoch nicht. Bin aber nicht ganz sicher.

Eine Lösung falls die doch doppelt ist wäre vielleicht:
Der erste der zugreift schreibt ne lock-Datei daneben, liest, löscht die lock-Datei. Alle anderen warten.

Hallo Michael!

Soweit ich weiß werden die entsprechenden Implementierungen
der idl’s wirklich kopiert. Andere Klassen, also auch deine
Dateizugriffsklasse mit Singleton jedoch nicht. Bin aber nicht
ganz sicher.

Danke, ich werd mal versuchen, die Dateizugriffsklasse am Anfang des Servercodes zu erstellen. Mit ein bisschen Glück :wink: bleibt die Referenz der Dateizugriffsklasse in allen „Kind-prozessen“ (sind ja nicht wirklich welche) gleich, und dann müsste es gehen.

Eine Lösung falls die doch doppelt ist wäre vielleicht:
Der erste der zugreift schreibt ne lock-Datei daneben, liest,
löscht die lock-Datei. Alle anderen warten.

Ob das klappt? Die Idee hatte ich auch schon, aber ich eigentlich befürchte ich dann im Worst-Case einen Deadlock, weil zwei Dateizugriffsobjekte gleichzeitig die Datei erstellen wollen und sich gegenseitig blockieren… :expressionless:

Trotzdem, vielen Dank schon mal!

kvida