Bonjour voici mon code qui utilise un sémaphore :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| int main (int argc, char * argv[])
{ int sem,e,j,k,f;
//semaphore
sem=ouvrirsem(123);
initsem(sem,1);
if (fork()==0)
{
e=0;
while(e<5000){
k=0;
//section critique
down(sem);
printf("1");
fflush( stdout );
while(k<200000)
k++;
printf("1");
fflush( stdout );
up(sem);
//section non critique
e++;
}
printf("Le fils a terminé \n");
exit(0);
}
j=0;
while(j<5000){
k=0;
//section critique
down(sem);
printf("2");
fflush( stdout );
while(k<200000)
k++;
printf("2");
fflush( stdout );
up(sem);
//section non critique
j++;
}
printf("Le père a terminé \n");
wait(0);
supsem(sem);
exit(0);
} |
Dans ce code j'écris 2 process qui utilise une section critique. Le fils affiche '1' après y être entré et '1' avant d'en sortir même chose pour le père mais celui ci affiche '2'. Dans ma section critique j'effectue des opérations qui peuvent être remplacé par un sleep(). Lorsque jeffectue ce code j'ai un résulat de ce type :
112211112222222222111111112211221122...
mais si je modifie mon while(k<200000) par while(k<200000000) mon résultat est de type:
11221122112211221122112211221122112211..
Donc chacun son tour. Est ce que c'est dû a la durée de mes opérations que l’ordonnanceur décide de ne plus donner la main a un process qui s'est appropriés trop de temps le processeur ? où y'a t'il autre chose ?
Merci
Partager