CORBA parallel auf beschränkten Ressourcen?

Von: , Frage gestellt am Do, 25. Aug 2005

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 :(, 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! :)

kvida

2 Antworten zu dieser Frage

  1. Antwort von nach 3 Stunden 1 hilfreich
    Re: CORBA parallel auf beschränkten Ressourcen?

    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.

    • Antwort von nach 18 Stunden 1 hilfreich
      Re^2: CORBA parallel auf beschränkten Ressourcen?

      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 ;) 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... :|

      Trotzdem, vielen Dank schon mal!

      kvida

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!