Bonjour voici mon code qui utilise un sémaphore :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
112211112222222222111111112211221122...
mais si je modifie mon while(k<200000) par while(k<200000000) mon résultat est de type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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