Jeg trenger å opprette en delt bibliotek for å få tilgang til en i minnet DB. The DB er ikke stort, men stort nok til å gjøre den tunge å bære rundt på hver enkelt prosess bruker delt bibliotek. Heldigvis er det ganske statisk informasjon, så jeg trenger ikke å bekymre deg mye om synkronisering av data mellom forekomster av delte biblioteket. Men det jeg trenger å bekymre deg initialiseres minnet en gang og aldri igjen.
Jeg vil elske alle de delte bibliotekene til å ha et bibliotek scoped variabel, men jeg tror ikke det er mulig. Hvis det er, la meg vite ... men jeg vet vanligvis hver prosess får et eget eksemplar av den delte bibliotekets data segmentet. Jeg tror ikke det er en måte å merke en del av at data segment som deles på tvers av alle forekomster av biblioteket.
Så jeg tror jeg må ha biblioteket åpner DB i delt minne. Men den første forekomsten av biblioteket for å bli startet opp behov for å opprette den delte minnet, legge til det og legger det hele tatt før noen andre mulige forekomster kan bruke den. Hvordan kan jeg garantere at denne opprette / initialisere skjer én gang før delte minnet brukes?
Ved første, jeg trodde ikke-existance av delt minne segmentet ville gjøre det ... men det finnes en kappløpssituasjon mellom opprette og initialisere der i en annen forekomst av biblioteket ville se det delte minnet, men ikke få tilgang til det fordi det ikke er inited. Jeg vet jeg kan lagre
POSIX mutex står i delt minne ... så jeg antar jeg kan bruke én av dem. Men det andre problemet eksisterer når det delte segmentet er "igjen" fra tidligere kjørt.
Hva skjer da? Så ... alle bibliotekets "ta av" fra segmentet, men ingen av dem ødelegge det. Hva nå ... neste gang biblioteket starter friskt det skal re-init det delte minnet, men vil ikke.
Hummm ... noen ideer? Noen retning? Hva er den vanligste metoden for å gi delt minne synkronisering? Bør jeg bruke et system semaforen? Ville det ikke lider av det samme "varm" start problem (detached prosesser fra delt bibliotek men minne / semaphores fortsatt bosatt).
Dette vil være skrevet for AIX 5, BTW, for dem som er interessert.