Lista linkata su shared memory multi-processo

di il
4 risposte

Lista linkata su shared memory multi-processo

Ciaoo a tutti.
Ho un problema per quanto riguarda la creazione di una e piu' liste linkate su shared memory; e devo utilizzare il multiprocesso System V (niente thread!)
All'inizio avevo pensato: " E che ci vuole, il processo padre crea una lista nella sua area heap, i cui nodi contengono gli indirizzi delle shm. Quindi i processi figli possono semplicemente fare pop e push sulla lista con le usuali malloc e free". TUTTO SBAGLIATO!

I processi figli hanno tutti una copia della memoria del processo padre, e quindi lavorano tutti su liste diverse! Infatti ogni volta per ogni processo sembra che la lista non sia mai stata toccata :p

Quindi in tutto questo...come posso creare una lista "linkata" in memoria condivisa, dato che non hanno senso malloc/free?

Io avevo pensato (male) di sostituire a malloc shmget e a free shmctl(remove), ma purtroppo solo il processo padre puo' creare le shm per i processi figli e NON viceversa.

4 Risposte

  • Re: Lista linkata su shared memory multi-processo

    Io direi di usare un bel costrutto 'monitor'
  • Re: Lista linkata su shared memory multi-processo

    Ciao fabiostyle,
    puoi pensarla come se fosse una lista serializzata, (supponendo che i vari elementi abbiano dimensione fissa) per prima cosa c' è il numero di elementi e poi gli elementi che si susseguono, ogni elemento è formato dalla parte dati e dal puntatore (in questo caso un indice) all' altro elemento. Per allocare un nuovo elemento lo metti in fondo, aggiorni il contatore di elementi e sistemi gli indici (sempre in shared memory). Per deallocare un elemento protresti non fare nulla e semplicemente perdere il suo riferimento.

    Diciamo che è un po come implementare una lista usando un array.
    Ovviamente devi usare un semaforo quando un processo manipola la lista.
    Bye
  • Re: Lista linkata su shared memory multi-processo

    Ragazzi ,salve, scusate la mia ignoranza ma di cosa parlate?
  • Re: Lista linkata su shared memory multi-processo

    Ciao llC ,
    più processi possono condividere una zona di memoria chiamata Shared Memory e usarla per condividere dati. Spesso è usata dai driver o da processi di sistema, ma la possono usare anche dei processi qualunque.

    Il problema che si discuteva era come manipolare una lista in questa zona di memoria. Volendo il problema è simile a voler gestire una lista tra più processi usando un file come area comune.
Devi accedere o registrarti per scrivere nel forum
4 risposte