Ich brauche, um eine Shared-Library für den Zugriff auf ein im Speicher DB. Die DB ist nicht riesig, aber groß genug, um sie umständlich zu tragen in jedem einzelnen Prozess mit der Shared Library. Zum Glück ist es ziemlich statische Informationen, so dass ich nicht viel Grund zur Sorge über die Synchronisation der Daten zwischen den Instanzen der Shared Library. Aber was ich tun muss, sich Sorgen zu machen, ist die Initialisierung der Speicher einmal und nie wieder.
Ich würde gerne alle gemeinsam genutzten Bibliotheken, eine Bibliothek Umfang variabel, aber ich glaube nicht, dass das möglich ist. Wenn es so ist, lassen Sie mich wissen, ... aber ich weiß, normalerweise jeden Prozess erhält seine eigene Kopie des Shared Library-Daten-Segment. Ich glaube nicht, dass es einen Weg gibt, um Flagge ein Teil der Daten, die als gemeinsame Segment in allen Fällen von der Bibliothek.
Also, ich schätze, ich muss die Bibliothek Zugriff auf die DB in den gemeinsamen Speicher. Allerdings, die erste Instanz der Bibliothek gestartet werden soll, bis zu den gemeinsamen Speicher, legen Sie es, und sie laden alle vor allen anderen Fällen möglich, sie verwenden können. Wie kann ich garantieren, dass diese erstellen / initialisieren passiert, wenn vor dem gemeinsamen Speicher wird verwendet?
Am Anfang dachte ich, die nicht existance des Shared-Memory-Segment würde es tun ... aber es gibt eine Race Condition zwischen erstellen und zu initialisieren, wenn in einem anderen Fall würde der Bibliothek finden Sie in der Shared-Memory, aber nicht in der Lage sein, um auf sie weil sie noch nicht inited. Ich weiß, ich kann
posix Mutex in Shared-Memory ... so dass ich denke, ich kann einer von ihnen. Doch auch die anderen Problem besteht, wenn das Shared-Memory-Segment wird "links über" die von einem vorherigen Lauf.
Was passiert dann? Also ... alle Bibliothek "lösen" aus dem Segment, aber keiner von ihnen zu zerstören. Und was jetzt ... das nächste Mal die Bibliothek beginnt frisch sollte es wieder-init den gemeinsamen Speicher, wird aber nicht.
Hummm ... irgendwelche Ideen? Einige Richtung? Was ist die gängige Methode der Bereitstellung von Shared-Memory-Syncronization? Sollte ich ein System Semaphore? Wäre es nicht leiden, die gleiche "warme" Start Problem (Prozesse losgelöst von Shared Library, aber Memory / Semaphoren noch Wohnsitz hat).
Dies wird für AIX 5, BTW, für die Interessenten.