Produit du jour : AvanQuest Comptes bancaires et synchronisation 2006 à partir de 36.00 € (Logiciel)
16/06/2006 11:02 par Petit Grasshopper | 5 réponse(s) | Signaler un contenu abusif ou erroné
Bonjour,

J'ai besoin de réaliser un programme qui fait ceci:
- initialisation
- fork()
- le père s'endort
- le fils fait un certain boulot, prévient le père puis s'endort
- le père fait sa part de boulot et meurt
- le fils continue à dormir jusqu'à ce qu'on le réveille

J'ai fait ça comme ça (en simplifiant) :

newpid = fork();
if (newpid == 0) {
/* fils */
boulot1();
kill(getppid(), SIGUSR1);
pause();
}
else {
/* père */
pause();
boulot2();
exit(0);
}

Ça marche. Mais en y réfléchissant, il y a une "race condition".
Le signal USR1 peut arriver avant que le père soit en pause.
Auquel cas, je suis foutu.

Disons que dans 99,999999% des cas, le fils passera plusieurs
secondes dans boulot1 et donc je suis sauvé.

Mais je voudrais être perfectionniste. J'ai pensé à diverses
méthodes pour résoudre ce problème (par exemple en utilisant
le filesystem) mais toutes choque mon sens de l'esthétique.

Des idées ?

A+
mots-clés : synchronisation, process, pere, fils Catégories : OS Alternatif, Unix
 
faire un ftp ou un telnet dans un batch ...
SUN : solaris 10 administrr le CPU
 

 

Téléchargements

  • BitDefender Small Office Security
    BitDefender Small Office Security est une solution destinée à la protection des petites et moyennes entreprises face aux menaces du Web, que ce ...
  • VDownloader
    VDownloader est un outil qui permet de récupérer les vidéos des principales plates-formes en ligne telles que YouTube ou Dailymotion.
  • Comparer des nombres
    Comparer des nombres est un logiciel éducatif qui, comme son nom l'indique, permet d'entraîner l'enfant à la comparaison des nombres.
Tous les téléchargements