Thread Shared Memory unter Windows
(8 answers)
Opened by maik at 2005-10-10 19:22
Hallo!
Für ein etwas umfangreicheres Projekt benötige ich Shared Memory, um von mehreren Prozessen aus auf den selben Datensatz zugreifen zu können. Das ganze soll dann auf Windows und Unix laufen. Dazu ein paar Fragen: 1.) Gibt es unter Windows Shared Memory? Kann ich SM von Perl aus benutzen? Mit welchem Modul? (Insoweit ich bisher rausgefunden habe wird die Frage wohl mit nein beantwortet). 2.) Gibt es ein Perl-Modul, das Shared-Memory emuliert. Zum Bsp. unter Benutzung von Dateien als Speicher? (Auch hier hab ich bisher nichts gefunden) 3.) Wenn 1. und 2. mit nein beantwortet wird, habe ich vor selbst eine Emulation zu schreiben. Und zwar unter Verwendung von Dateien als Speicher. Mir ist klar, das das performance-mäßig extrem schlecht ist, aber es geht bei mir in erster Linie nicht um Performance (wenn jemand ne idee hat, wie mans anders machen könnte, bin ich natürlich immer offen). Das ganze würde ich dann über ge-tie-te Variablen realisieren (im wesentlichen soll es die gleiche Schnittstelle wie IPC::Shareable haben). Jedes mal wenn man eine Variable liest oder schreibt muß sie erneut aus der datei gelesen bzw. die datei neu schreiben. Um komplexere Sachen zu erlauben will ich das ganze dann immer mit Storable speichern. Mein Problem jetzt. Wenn jemand ne Referenz auf ein Objekt hat was irgendwo in dieser gespeicherten Datenstruktur hängt. Wenn ich nun diese Referenz lesen will, müßte ich ja (außer wenn ich gelockt habe) die ganze Datenstruktur neu lesen und die Referenz stimmt nicht mehr mit der Speicherstelle überein, wo nun das neu eingelesene steht. Ich hoffe mein Problem ist soweit erstmal klar geworden. Was ich also bräuchte ist eine adressierung der einzelnen elemente in einer datenstruktur, die nicht auf der adressierung im speicher aufbaut. Wenn ich das nicht hinkriege könnte ich ja immer wieder nur über die "wurzel" eine datenstruktur mich wieder durcharbeiten. Habt ihr eine Idee, wie ich dieses Problem lösen kann (vorrausgesetzt ich hab mein problem überhaupt halbwegs rüberbringen können). So, jetzt bin ich fertig mit meinem ersten Beitrag... Vielen Dank und Grüße Maik |