Domanda

Ho una variabile di conteggio che dovrebbe essere contata da alcuni processi che ho biforcato e usato / letto dal processo madre.

Ho provato a creare un puntatore nella mia funzione principale () del processo madre e contare quel puntatore nei bambini biforcati. Questo non funziona! Ogni bambino sembra avere la propria copia anche se l'indirizzo è lo stesso in ogni processo.

Qual è il modo migliore per farlo?

È stato utile?

Soluzione

Ogni bambino ottiene la propria copia della memoria dei processi genitore (almeno non appena tenta di modificare qualcosa). Se è necessario condividere tra i processi, è necessario esaminare la memoria condivisa o un meccanismo IPC simile.

A proposito, perché stai trasformando questo in un wiki della community - potresti limitare le risposte in tal modo.

Altri suggerimenti

2 processi non possono condividere la stessa memoria. È vero che un processo figlio biforcuto condividerà la stessa memoria sottostante dopo il biforcazione, ma un tentativo di scrivere su questo farebbe sì che il sistema operativo alloca un nuovo spazio scrivibile per esso da qualche altra parte.

Cerca in un'altra forma di IPC da utilizzare.

La mia esperienza è che se si desidera condividere informazioni tra almeno due processi, non si vuole quasi mai condividere solo un puntatore vuoto * in memoria. Potresti dare un'occhiata a

Incrementa Interprocesso

che può darti un'idea, come condividere dati strutturati (leggi "classi" e "strutture" tra processi).

No, usa IPC o thread. Vengono condivisi solo i descrittori di file (ma non il puntatore di ricerca).

Potresti voler controllare la memoria condivisa.

i puntatori sono sempre nello stesso processo. È privato del processo, rispetto all'indirizzo di base del processo. Esistono diversi tipi di meccanismi IPC disponibili in qualsiasi sistema operativo. Puoi optare per Windows Messaging, memoria condivisa, socket, pipe ecc. Scegli uno in base alle tue esigenze e alla dimensione dei dati. Un altro meccanismo consiste nel scrivere i dati nel processo di destinazione utilizzando le API di memoria virtuale disponibili e notificare il processo con il puntatore corrispondente.

Un'opzione semplice ma una forma limitata di IPC che funzionerebbe bene per un conteggio condiviso è un "segmento di dati condiviso". Su Windows questo è implementato usando la direttiva #pragma data_seg .

Vedi questo articolo per un esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top