boost::interprocess - Interprozesskommunikation, Verständnissfrage



  • Hallo,
    in diesem Tutorial wird ja erklärt wie man Speicher reserviert und für lokale aber externe Programme bereitstellt, sodass von diesen Programmen darauf öffentlich zugegriffen werden darf. Soweit ich das nun verstanden habe, wird in dem Tutorial erläutert, wie man den Speicher in Programm1 bereitstellt, aber letztendlich nicht wie man mit Programm2 darauf zugreift. Nun, das wäre auch schon die Frage. Wie geht das? Woher weiß man in Programm2, wie groß der bereitgestellte Speicherblock in Programm1 bzw. welches Offset der Speicherblock im RAM hat?



  • Ich habe gerade gelesen, dass den shared_memory- und managed_shared_memory -Objekten ein eindeutiger Name gegeben werden muss. Liege ich daher richtig mit der Annahme, dass Programm1 vor der Laufzeit ein eindeutiger Name für den vorgesehenen Speicherblock gegeben werden muss? Falls ja; Dann wäre das doch ziemlich undynamisch und statisch oder nicht? Und wenn man jetzt beispielsweise den Speicherblock mit boost::interprocess::shared_memory_object::truncate in Programm1 vergrößert/verkleinert, wie weiß Programm2 dann, wann dies passiert ist?

    Ahja; Danke im Voraus! xD



  • Bis auf die letzte Frage, haben sich mit;

    Dem Konstruktor der Klasse boost::interprocess::named_mutex müssen Sie neben einem Parameter, der angibt, ob der Mutex geöffnet oder erstellt werden soll, einen Namen übergeben. Jedes Programm, das den Namen kennt, kann nun den gleichen Mutex öffnen. Um dann den Zugriff auf Daten im shared memory zu synchronisieren, muss ein Programm lediglich den Mutex in Beschlag nehmen, indem es lock() aufruft

    alle Fragen geklärt.



  • *push*



  • Liege ich daher richtig mit der Annahme, dass Programm1 vor der Laufzeit ein eindeutiger Name für den vorgesehenen Speicherblock gegeben werden muss?

    Falsch! Wie das Programm den Namen des Speicherbereiches erfaehrt, ist egal. Das kann auch dynamisch zur Laufzeit erfolgen.

    ... welches Offset der Speicherblock im RAM hat

    Wird von der Betriebssystemfunktionalitaet abstrahiert.


Anmelden zum Antworten