Ik nodig voor het maken van een shared library om toegang te krijgen tot een in het geheugen DB. Het DB is niet enorm, maar groot genoeg om het log te voeren rond in elk proces met behulp van de gedeelde bibliotheek. Gelukkig is het vrij statische informatie, dus ik hoef niet te veel zorgen over het synchroniseren van de gegevens tussen de verschillende instanties van de gedeelde bibliotheek. Maar wat ik wel zorgen te maken over wordt geïnitialiseerd geheugen eens en nooit weer.
Ik zou graag alle gedeelde bibliotheken te beschikken over een bibliotheek Scoped variabele, maar ik denk niet dat dat mogelijk is. Als dat zo is, laat het me weten ... maar ik weet dat normaal elk proces krijgt zijn eigen kopie van de gedeelde bibliotheek de gegevens segment. Ik denk niet dat er een manier is om de vlag een deel van die gegevens segment als gedeeld in alle gevallen van de bibliotheek.
Dus, ik denk dat ik het weer nodig om de bibliotheek toegang tot de DB in het gedeeld geheugen. Echter, de eerste aanleg van de bibliotheek op te starten moet u het gedeelde geheugen, hechten aan, en laadt alles vóór alle andere mogelijke gevallen kunt gebruiken. Hoe kan ik zorgen dat deze worden gemaakt / initialiseren gebeurt eenmaal voor het gedeelde geheugen wordt gebruikt?
Ten eerste, ik dacht het niet-bestaan van het gedeelde geheugen segment zou doen ... maar er bestaat een "race condition tussen creëren en te initialiseren waar-in een ander exemplaar van de bibliotheek zou het gedeelde geheugen, maar geen toegang tot het want het is nog niet inited. Ik weet dat ik kan opslaan
POSIX Mutex's in het gedeelde geheugen ... dus ik denk dat ik kan gebruik maken van een van hen. Echter, de ander probleem bestaat wanneer de gedeelde geheugen segment "links boven" uit eerdere runs.
Wat gebeurt er dan? Dus ... alle bibliotheek is "los" van het segment, maar geen van hen vernietigen. Wat nu ... de volgende keer dat de bibliotheek begint vers moet opnieuw init de gedeelde geheugen, maar zullen niet.
Hummm ... ideeën? Sommige richting? Wat is de gemeenschappelijke methode voor het verstrekken van het gedeelde geheugen synchronisatie? Moet ik gebruik van een systeem semaphore? Zou het niet te lijden hebben van dezelfde "warme" start probleem (vrijstaande processen uit gedeelde bibliotheek maar geheugen / semaforen nog steeds woont).
Dit zal worden geschreven voor AIX 5, BTW, voor diegenen die geïnteresseerd zijn.