bonjour
j'ai programmer un exercice en utilisant les semaphore de djikstra et j'ai eu un probleme lorsque j'ai utiliser un tableau de semaphore pour protéger un tableau de case malgré que chaque case devait etre utiliser en execlusion mutuel mais plusieur processus entrer en section critique pour modifier la case (that's big problem) bon voici les primitive de djikstra ainsi que le tableau de semaphore que j'ai utilisé et initialisé à 1

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
 
/* fichier dijkstra.h */
/* Implementation des semaphores de Dijkstra a l'aide des semaphores
* de SystemV.
*
* sem_create(): creation d'un semaphore
* P() : realisation de l'operation P sur un semaphore
* V() : realisation de l'operation V sur un semaphore
* sem_delete() : suppression d'un semaphore
*/
int sem_create(cle, initval) /* creation d'un semaphore relie a cle */
/* de valeur initiale initval */
key_t cle ;
int initval ;
{
int semid ;
union semun {
int val ;
struct semid_ds *buf ;
ushort *array ;
} arg_ctl ;
semid = semget(ftok("dijkstra.h",cle),1,IPC_CREAT|IPC_EXCL|0666) ;
if (semid == -1) {
semid = semget(ftok("dijkstra.h",cle),1, 0666) ;
if (semid == -1) {
perror("Erreur semget()") ;
exit(1) ;
}
}
arg_ctl.val = initval ;
if (semctl(semid,0,SETVAL,arg_ctl) == -1) {
perror("Erreur initialisation semaphore") ;
exit(1) ;
}
return(semid) ;
}
void P(semid)
int semid ;
{
struct sembuf sempar ;
sempar.sem_num = 0 ;
sempar.sem_op = -1 ;
sempar.sem_flg = SEM_UNDO ;
if (semop(semid, &sempar, 1) == -1)
perror("Erreur operation P") ;
}
void V(semid)
int semid ;
{
struct sembuf sempar ;
sempar.sem_num = 0 ;
sempar.sem_op = 1 ;
sempar.sem_flg = SEM_UNDO ;
if (semop(semid, &sempar, 1) == -1)
perror("Erreur operation V") ;
}
void sem_delete(semid)
int semid ;
{
if (semctl(semid,0,IPC_RMID,0) == -1)
perror("Erreur dans destruction semaphore"); 
 
}
 
 
 
//tab de semaphore 
int tab[5]:
for (i=0;i<(taille);i++)
{
tab[i]= sem_create(i,1) ;
printf("creation du semaphore s_tab_nc [%d]= %d \n",i,s_tab_nc[i]);
}
veillez me conseillez svp