Jeg har brug for at oprette et fælles bibliotek for at få adgang til en i hukommelsen DB. BF er ikke stor, men stor nok til at gøre det besværligt at slæbe rundt på i hver enkelt proces ved hjælp af den fælles bibliotek. Heldigvis er det temmelig statisk information, så jeg behøver ikke at bekymre sig meget om synkronisering af data mellem forekomster af delt bibliotek. Men hvad jeg behøver at bekymre sig om er initialisering hukommelsen en gang og aldrig igen.
Jeg ville elske alle de delte biblioteker til at have et bibliotek scoped variable, men jeg tror ikke, at det er muligt. Hvis det er tilfældet, så lad mig det vide ... men jeg kender normalt hver proces får sin egen kopi af den delte bibliotekets data segment. Jeg tror ikke, der er en måde at markere en del af, at data segment som deles på tværs af alle forekomster af biblioteket.
Så jeg gætter jeg nødt til at have biblioteket adgang BF i delt hukommelse. Men den første forekomst af det bibliotek, der skal startes op behov for at oprette den delte hukommelse, tillægger den, og indlæse det hele før alle andre mulige tilfælde kan bruge det. Hvordan kan jeg garantere, at dette skaber / initialisere sker en gang før den delte hukommelse bruges?
Ved første, jeg tænkte ikke-existance af den delte hukommelse segment ville gøre det ... men der findes en race betingelse mellem oprette og initialisere hvor-i en anden instans af biblioteket vil se den delte hukommelse, men ikke kunne få adgang til det fordi det endnu ikke er blevet inited. Jeg ved, at jeg kan gemme
POSIX mutex's i delt hukommelse ... så jeg gætter jeg kan bruge en af dem. Men det andet problem, når den delte hukommelse segment er "til overs" fra tidligere kørsler.
Hvad sker der så? Så ... alle bibliotekets "frigøre" fra segment, men ingen af dem ødelægge det. Hvad nu ... næste gang biblioteket starter fersk det bør re-init den delte hukommelse, men ikke vil.
Hummm ... nogen ideer? Nogle retning? Hvad er den fælles metode for delt hukommelse synkronisering? Skal jeg bruge et system Semaforens? Ville det ikke lider af de samme "varme" start problem (udstationerede processer fra delt bibliotek, men hukommelsen / semaforer stadig opholder).
Dette vil blive skrevet til AIX 5, BTW, for de interesserede.