R3g fonctionnaire certifié ITIL | _Faust_ a écrit :
Bonjour,
On me demande d'écrire un petit programme comme suit:
Écrire un programme C qui crée deux processus à l'aide de l'appel système fork(). Le père affichera les entiers pairs compris entre 1 et 100, le fils affichera les entiers impairs compris dans le même intervalle. Synchroniser les processus à l'aide des signaux pour que l'affichage soit 1 2 3 ... 100.
Bon,ce que j'ai écrit fait exactement ce qui est demandé, sauf au niveaux des signaux. Il y a une raison particulière pour synchroniser avec des signaux? Comme je suis pas très bon en C, peut-être que mon programme n'est pas optimal...
Code :
- #include <stdio.h>
- main()
- {
- int pid, i ;
- pid=fork() ;
- if (pid != 0)
- {
- for (i=0; i<=100; i++)
- {
- if (i%2==0)
- printf("\n je suis le processus pere %d", i);
- sleep(1) ;
- }
- }
- if (pid == 0)
- {
- for (i=0; i<=100; i++)
- {
- if (i%2!=0)
- printf("\n je suis le processus fils %d", i);
- sleep(1) ;
- }
- }
- }
|
|
1) pour les boucles, tu peux faire for (i=0; i <= 100; i+=2) par exemple. c'est un détail.
2) oui, la synchronization est nécessaire : il faut bien comprendre que les deux processus créés sont indépendants après le fork(). Tu n'as aucune garantie que l'affichage se fera dans l'ordre là. remplace sleep(1) par sleep(100) dans un des deux cas et tu vas comprendre.. Donc il faut que chaque processus, après un tour de boucle, signale à l'autre qu'il peut faire son tour suivant et ainsi de suite... ---------------
Au royaume des sourds, les borgnes sont sourds.
|