C sous unix => synchronisation avec les signaux - C - Programmation
Marsh Posté le 03-11-2013 à 11:03:13
Bonjour !
La "man page" de pause indique que la fonctionne ne se termine que quand un signal a été intercepté (donc que vous avez installé un handler et que celui-ci s'est terminé). Comme vous n'installez pas de handler sur SIGUSR1 ...
De plus, la gestion de la variable "flag" permet de se prémunir contre une arrivée trop rapide du signal de l'autre processus, avant que l'appel à la fonction pause n'ait eu lieu, ce qui bloquerait un processus dans l'appel suivant, et donc l'autre aussi, mécaniquement.
Bonne continuation !
Marsh Posté le 03-11-2013 à 12:21:21
Merci bcp Farian,
Tu avais raison , il fallait utiliser le handler .
je voudrais juste envisager le cas suivant :
on entre d'abord dans le processus fils , on imprime 1 et on fait un kill pour envoyer SIGUSR1 au père, ce dernier n'a pas encore exécuté la pause() ; par conséquent, il n'attrappe pas le signal et on aboutit à un bloquage.
est-ce qu'il y'a de fautes dans mon raisonnement ? :: merci infiniment
Marsh Posté le 03-11-2013 à 22:05:37
C'est pour cela qu'il y a la variable "flag", dans chaque process, qui permet de savoir si le handler a déjà été appelé pour ce pas de boucle ou non, sinon, en effet, on peut arriver à un blocage des deux threads.
Bonne continuation !
Marsh Posté le 03-11-2013 à 10:53:43
Bonjour
voila j'ai un petit problème de programmation en C sous Unix...
en effet, le prof de cours nous a donné la correction d'un exercice qui demandait d'afficher toutes les nombres de 1 à 100 de sorte que le fils affiche les nombres imapirs et le père affiche les nombres pairs.
J'ai fait un essai qui n'a pas marché d'abord :: le voici ::
et après le professeur nous a donné la correction qui ne me semblait pas différente de ma solution.Sa solution marche mais la mienne non ::
voici la solution du prof ::
=> je voudrais juste savoir quelle est la différence et pourquoi la mienne n'a pas marché et celle du prof a marché,
merci