Bonjour voici mon code qui utilise un sémaphore :
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 :Code:
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); }
mais si je modifie mon while(k<200000) par while(k<200000000) mon résultat est de type:Code:112211112222222222111111112211221122...
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 ?Code:11221122112211221122112211221122112211..
Merci