Salut,
j'ai un problemme dans ce code. Le sémaphore ne marche pas comme prévue.
j'ai pas pu localiser le problemme
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
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
int test;
key_t cle;
int semid;
struct sembuf op;
int num_proc=1,nb_proc;
int main(int argc, char **argv)
{
cle=ftok("test",'a');
semid = semget(cle, 1, IPC_CREAT | IPC_EXCL | 0666);
if(!semctl(semid, 0,SETVAL, 1)) printf("erreur initialisation sémaphore\n");
 
int pid;
printf("saisir le nombre de joueur d'une equippe:\n");
scanf("%d",&nb_proc);
nb_proc*=2;
do {
 
pid = fork();
 
if (pid!=0) {
num_proc++;
//test=semctl(semid, 0, IPC_RMID, 0); //Destruction du sémaphore
//if(!test) printf("erreur semctl!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
 
}
else if (pid==0) {
 
op.sem_num = 0; 
op.sem_op = -1; 
op.sem_flg = 0; 
test=semop(semid, &op, 1);
if(!test) printf("erreur semop!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
 
sleep(2);
printf("\nje suis le processus du pid:%d \n",getpid());
 
op.sem_op = 1; 
op.sem_num = 0; 
op.sem_flg = 0; 
 
test=semop(semid, &op, 1); 
if(!test) printf("erreur semop!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
 
}
} while ((pid!=0) && (num_proc<=nb_proc));//pid!=0 pour que le fils ne continue pas dans la boucle
 
return 0;
 
}