Ho bisogno di creare una libreria condivisa di accedere ad un DB in memoria. Il PB non è enorme, ma abbastanza grande da rendere difficile da portare in giro in ogni singolo processo utilizza la libreria condivisa. Fortunatamente, è piuttosto statica informazioni, quindi non ho bisogno di preoccuparsi molto di sincronizzare i dati tra le istanze della libreria condivisa. Tuttavia, ciò che ho bisogno di preoccuparsi per l'inizializzazione della memoria è una volta e mai più.
Mi piacerebbe tutte le librerie condivise di avere una biblioteca ambito variabile, ma non credo che possibile. Se si, fammi sapere ... ma so che ogni processo viene normalmente la propria copia della libreria condivisa del segmento dati. Non credo che ci sia un modo per segnalare che una parte del segmento di dati condivisi, come in tutti i casi della biblioteca.
Quindi, penso io, devi avere l'accesso alla biblioteca PB in memoria condivisa. Tuttavia, il primo esempio della biblioteca di essere avviato a creare le esigenze di memoria condivisa, allegare ad esso, e caricare il tutto prima di qualsiasi altra possibili casi può usare. Come faccio a garantire che questo crea / inizializzazione avviene una volta prima che la memoria condivisa è utilizzata?
In un primo momento, ho pensato di non existance del segmento di memoria condivisa potrebbe farlo ... ma esiste una race condition tra creare e inizializzare dove in un altro esempio della biblioteca di vedere la memoria condivisa, ma non essere in grado di accedere perché non è stato ancora inited. So che è in grado di memorizzare
posix mutex nella memoria condivisa in modo ... penso che posso usare uno di loro. Tuttavia, l'altro problema esiste quando il segmento di memoria condivisa è "più di sinistra" dal precedente corre.
Che cosa succede allora? Allora ... tutte le librerie di "staccare" dal segmento, ma nessuno di loro distruggerlo. Ora che cosa ... la prossima volta che la biblioteca inizia fresche dovrebbe ri-init di memoria condivisa, ma non lo faranno.
Hummm ... tutte le idee? Alcuni direzione? Qual è il metodo comune di fornire la memoria condivisa syncronization? Devo utilizzare un sistema semaforo? Non è lo stesso affetto da "caldo" inizio problema (staccato da processi libreria condivisa, ma la memoria / semafori ancora residente).
Questo sarà scritto per AIX 5, BTW, per coloro che sono interessati.