Forum général.général Programmation: Algorithme parallélisé: Je n'arrive pas à l'écrire avec fork()

Posté par  .
Étiquettes : aucune
0
30
sept.
2007
Alors voilà donc l'algo du programme:

J'ai deux processus qui tournent en parallèle:
- Un processus qui va lire en boucle des données dans une file d'attente, puis les réécrire dans une liste de connexions réseaux.
- Un processus qui ouvre un port d'administration en écoute et qui accepte les connexions réseaux avant de les ajouter à la liste des connexions.

En fait il y a d'autres processus, mais vis-à-vis des deux précédents, ils ne font qu'écrire des messages dans la file d'attente (en plus de leurs tâches respectives).

En fait la file d'attente fait office de liste d'attente des messages à envoyer.

Mais je veux que les messages soit recus par tous ceux qui se connectent au port d'administration du programme, d'où le processus qui lit en continue la file d'attente avant de réecrire les messages dans chacune des connexions réseaux de la liste.

Alors pour transcrire cet algo en C:
- utilisation d'un pipe pour la file d'attente, avec accès exclusif via une sémaphore.
- utilisation de sockets TCP pour les connexions réseaux.
- utilisation de fork pour créer les différents processus.
- utilisattion de mémoire partagée pour la liste des connexions.

Si le fork qui s'occupe d'envoyer les messages peut lire le pipe sans problème, celui-ci étant ouvert avant sa création, il ne peut par contre pas écrire dans les sockets puisqu'il sont ouvert dans un autre fork postérieurement à sa création.

Je tiens absolument à conserver fork pour la parrallélisation des autres processus et j'aimerai ne pas mélanger fork et thread.

Ma question serait donc du genre y a-t-il un moyen pour qu'un processus envoie à un autre processus un descripteur de fichier ouvert par le premier ?

Bien sur je suis ouvert à tout autre suggestion.

Cordialement.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.