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+
Précédente
Suivante
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