Bonjour, je reçois un message d'erreur venant de semop : invalid argument lorsque je fais wait_s(semid,mutex). Voici mon code :
En gros, je crée un set de deux sémaphores et j'implémente deux fonctions signal et wait (souvent V et P)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 int semid = sem_create(2); #define mutex 0 sem_init(semid,mutex,1); #define completed 1 sem_init(semid,completed,1); /* fonctions permettant de manipuler les sémaphores */ int sem_create(int num_semaphores) /* Crée un set de num_semaphores semaphores */ { int semid; if ((semid = semget(IPC_PRIVATE, num_semaphores, IPC_CREAT | 0666 )) < 0) { perror("Erreur en créant les sémaphores"); exit(1); } return semid; } void sem_init(int semid, int index,int value) /* Initialise un sémaphore index du set semid à la valeur value */ { if (semctl(semid,index,SETVAL,value) <0) { perror("Erreur en initialisant les sémaphores"); exit(1); } } void signal_s(int semid, int index) { struct sembuf sb; sb.sem_num = index; sb.sem_op = 1; sb.sem_flg = 0; if (semop(semid,&sb,1) == -1) { perror("Erreur dans signal_s"); exit(1); } } void wait_s(int semid, int index) { struct sembuf sb; sb.sem_num = index; sb.sem_op = -1; sb.sem_flg = 0; if (semop(semid,&sb,1) != 0) { perror("Erreur dans wait_s"); exit(1); } }
Pouvez-vous me dire quelle est mon erreur?
