Question

J'ai une variable de comptage qui devrait être comptée par quelques processus que j'ai définis et utilisés / lus par le processus mère.

J'ai essayé de créer un pointeur dans ma fonction main () du processus mère et de compter ce pointeur dans les enfants forkés. Cela ne fonctionne pas! Chaque enfant semble avoir sa propre copie même si l'adresse est la même dans tous les processus.

Quel est le meilleur moyen de le faire?

Était-ce utile?

La solution

Chaque enfant reçoit sa propre copie de la mémoire du processus parent (au moins dès qu'il essaye de modifier quoi que ce soit). Si vous devez partager des processus, vous devez consulter la mémoire partagée ou un mécanisme IPC similaire.

BTW, pourquoi en faites-vous un wiki de communauté? Vous risquez donc de limiter les réponses.

Autres conseils

2 processus ne peuvent pas partager la même mémoire. Il est vrai qu’un processus enfant créé partagera la même mémoire sous-jacente après le forking, mais une tentative d’écriture dans ce but obligerait le système d’exploitation à lui attribuer un nouvel espace accessible en écriture.

Recherchez une autre forme de IPC à utiliser.

D'après mon expérience, si vous souhaitez partager des informations entre au moins deux processus, vous ne voulez presque jamais partager un seul pointeur vide * en mémoire. Vous voudrez peut-être jeter un oeil à

Boost interprocess

qui peut vous donner une idée de la façon de partager des données structurées (lisez les "classes" et les "structures") entre les processus.

Non, utilisez IPC ou des threads. Seuls les descripteurs de fichier sont partagés (mais pas le pointeur de recherche).

Vous pouvez extraire de la mémoire partagée.

les pointeurs sont toujours dans le même processus. Le processus est privé, par rapport à l'adresse de base du processus. Différents types de mécanismes IPC sont disponibles dans tous les systèmes d'exploitation. Vous pouvez choisir Windows Messaging, la mémoire partagée, le socket, les tubes, etc. Choisissez-en un en fonction de vos besoins et de la taille des données. Un autre mécanisme consiste à écrire des données dans le processus cible à l'aide des API de mémoire virtuelle disponibles et à notifier le processus avec le pointeur correspondant.

Un "segment de données partagé" est une option simple, mais limitée, qui conviendrait bien pour un décompte partagé. Sous Windows, ceci est implémenté à l'aide de la directive #pragma data_seg .

Voir cet article pour un exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top