Angelseb a écrit :
1ère question :
Faut-il utiliser des pipes pour synchroniser le pere et le fils pour qu'entre chaque calcul, l'un affiche sa partie, puis que l'autre processus affiche la sienne et ainsi de suite?
|
Absolument pas. Le pipe sert à transmettre des informations entre 2 processus, pas à les synchroniser. Evidemment, la synchro est induite puisque le processus qui lit reste bloqué jusqu'à ce que le processus qui écrit écrive dans le pipe mais la synchro n'est pas le but du pipe.
Si tu veux faire juste une simple alternance p1/p2, tu peux mettre des "sleep" comme cela a été dit ou, si tu veux vraiment être pro, tu inclus dans ton code des sémaphores avec l'algo suivant
- création/initialisation du sémaphore avant le fork - Initialisation à "1" ("man semget" et "man semctl" )
- Après le fork, tu programmes dans le père et le fils les algo suivant identiques pour les 2 processus
=> prendre le sémaphore (opération -1)
=> travailler
=> rendre le sémaphore (opération +1)
Comme la prise ne se fera que sur l'un des processus, l'autre restera bloqué (un sémaphore ne peut pas être négatif) jusqu'à ce que le processus qui a la main rende le sémaphore.
Angelseb a écrit :
2ème question :
Pourquoi la phrase "l vaut x et q vaut y" s'affiche 2 fois alors qu'elle est située après le if?
|
Parce que, dès que le "fork" est lancé, tout le reste du code se duplique. Tout le "if/else" est dupliqué dans les 2 processus mais chacun d'eux n'exécute que le bloc qui le concerne. Après le "if", la suite du code est exécutée par les 2 processus.
Mieux vaut poser une question et paraître bête 30 sec. que de ne pas la poser et montrer que tu l'es durant toute ta vie.
Message édité par Sve@r le 26-11-2004 à 19:25:36