Bonjour,
J'ai crée des processus fils (conso/prod) partageant un segment de mémoire en l'occurrence un tableau d'entiers.
Le nombre de producteurs et consommateurs est passé en paramètre du programme principal (main).
Seulement, après création d'une ressource partagée, on doit le détruire par la suite i.e lorsqu'on ne l'utilise plus.
Mon problème est là.
code1 : Je mets 3 producteurs et 5 consommateurs ça ne marche pas bien évidemment.
solution :
code2 : Je les fais boucler indéfiniment cela fonctionne mais à ce moment comment détruire la ressource partagée?
Voici le code1
Et le code2, la différence est dans le code producteur-consommateur (boucle infini donc je ne peux détruire la ressource):
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 void producteur{ P(caseVide); P(mutexP); // dépôt de massage V(casePleine); V(mutexP); } void consommateur{ P(casePleine); P(mutexC); // dépôt de massage V(caseVide); V(mutexC); } /* Programme principal */ // création de la mémoire partagée // Attachement à la ressource partagée //création des sémaphores // Créer les producteurs for(i=0; i<nombre_prod; i++){ if((pid=fork()) == -1) die("fork"); if(pid==0){ producteur(); shmdt(...); exit(EXIT_SUCCESS); } } // Créer les consommateurs for(i=0; i<nombre_conso; i++){ if((pid=fork()) == -1) die("fork"); if(pid==0){ consommateur(); shmdt(...); exit(EXIT_SUCCESS); } } // Attend les processus fils // détruit le sehment de mémoire // détruit le sémaphore
Une idée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Je mets une boucle void producteur{ while(TRUE){ ... } } void consommateur{ while(TRUE){ ... } }
Merci.
Partager