Tobias Barth schrieb:
Raimund Hölle wrote:
Rinke, Reiner schrieb:
Raimund Hölle [mailto:mailings@hoelle-online.de]
kennt jemand einen Weg, wie mehrere Prozesse auf gemeinsame Daten in einer shared library zugreifen können?
[...]
Hi, ausser shared memory faellt mir nix ein. Die Administrierung ist m. E. gar nicht so schlimm, bzw. laesst ich gut kapseln.
Es geht mir nicht um den bischen Code zum Anlegen und Andocken des Shared Memory, sondern darum, komplexe Strukturen (Listen mit mehreren Hierarchieebenen) in das Shared Memory zu legen - im Adressraum des Programmes verwende ich eine C++-Listenklasse, die die gesamten Operationen, incl. Verwaltung, Suche usw. bereits vorgibt, der Code den ich selber schreiben muß, wird dadurch stark minimiert.
Dies funktioniert im Shared Memory leider nicht.
Du kannst dem Linux aber befehlen, an welche Adresse es ein shared memory segment in den Adressraum Deines Prozesses einblenden soll. Wenn jeder Prozess das segment an die gleiche Adresse blendet, können die Prozesse sogar untereinander Zeiger austauschen!
Ja, allerdings hat dies mehrere Nachteile, für die ich momentan keine Lösung kenne: 1. Ein shmat()-Aufruf mit angegebener Adresse ist nicht portabel, das Programm muß leider auch unter HPUX arbeiten (wobei es bei der derzeitigen HPUX-Version so ist, daß das Speichersegment sowieso immer unter der gleichen Adresse sichtbar wird). 2. Da unterschiedliche Programme (Binaries) das Shared Memory Segment einbinden müssen, ist es problematisch, immer die gleiche Adresse zu verwenden (ist aber lösbar). 3. (Und das ist mein Hauptproblem!) Wie überrede ich C++, die Objekte in dem Shared Memory zu verwalten, anstatt auf dem Heap? Leider bringt es nichts, nur neue new() und delete() Funktionen anzulegen, da ja bestehende Bibliotheken (u. a. STL) auch diese Funktionen dann benutzen müssen. Mit Punkt 1. und 2. könnte ich leben, wenn ich eine Lösung für 3. finden würde. Viele Grüße Raimund