Suppression de la sémaphore globale

master
Philippe Pittoli 2011-03-24 01:33:21 +01:00
parent 96f0f537ed
commit 6ad5d67c7d
3 changed files with 2 additions and 15 deletions

View File

@ -30,10 +30,9 @@ int main( int argc, char **argv)
if(argc < 2) { printf("Usage : %s nSHM \n", argv[0]); exit(EXIT_FAILURE); } if(argc < 2) { printf("Usage : %s nSHM \n", argv[0]); exit(EXIT_FAILURE); }
int shmid, shm_key, i = 0; int shmid, shm_key, i = 0;
int mutex_data, mutex_tpa, mutex_glob; int mutex_data, mutex_tpa;
key_t sem_key_data = MUTEX_DATA; key_t sem_key_data = MUTEX_DATA;
key_t sem_key_tpa = MUTEX_TPA; key_t sem_key_tpa = MUTEX_TPA;
key_t sem_key_glob = MUTEX_GLOB;
shm_key = (key_t) atoi(argv[1]); shm_key = (key_t) atoi(argv[1]);
MEMP * memoireP; MEMP * memoireP;
@ -63,9 +62,6 @@ int main( int argc, char **argv)
if((mutex_tpa = creat_sem( sem_key_tpa, 1)) == -1) if((mutex_tpa = creat_sem( sem_key_tpa, 1)) == -1)
{ perror("creat_sem"); exit(EXIT_FAILURE); } { perror("creat_sem"); exit(EXIT_FAILURE); }
if((mutex_glob = creat_sem( sem_key_glob, 1)) == -1)
{ perror("creat_sem"); exit(EXIT_FAILURE); }
temp.tete = 0; temp.tete = 0;
temp.queue = 0; temp.queue = 0;
@ -130,7 +126,6 @@ int main( int argc, char **argv)
if(mutex_data >= 0) { del_sem(sem_key_data); } if(mutex_data >= 0) { del_sem(sem_key_data); }
if(mutex_tpa >= 0) { del_sem(sem_key_tpa); } if(mutex_tpa >= 0) { del_sem(sem_key_tpa); }
if(mutex_glob >= 0) { del_sem(sem_key_glob); }
endwin() ; endwin() ;
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);

View File

@ -2,6 +2,5 @@
#define NVIDE 2 #define NVIDE 2
#define MUTEX_TPA 3 // Pour le tableau de producteurs #define MUTEX_TPA 3 // Pour le tableau de producteurs
#define MUTEX_DATA 4 // Pour les données #define MUTEX_DATA 4 // Pour les données
#define MUTEX_GLOB 10 // Pour pouvoir entrer dans la liste des producteurs actifs
#define MAX_PROD 5 // Maximum de producteurs #define MAX_PROD 5 // Maximum de producteurs
#define MAX_BUF 100 // Taille maximale du buffer #define MAX_BUF 100 // Taille maximale du buffer

View File

@ -18,7 +18,7 @@ int main( int argc, char **argv)
{ {
if(argc < 2) { printf("Usage %s numIPC\n", argv[0]); exit(EXIT_FAILURE); } if(argc < 2) { printf("Usage %s numIPC\n", argv[0]); exit(EXIT_FAILURE); }
MEMP *memoireP; MEMP *memoireP;
int mutex_data, mutex_tpa, sem_global, i=0; int mutex_data, mutex_tpa, i=0;
char c; char c;
const char CTRL_D = 4 ; const char CTRL_D = 4 ;
int shmid; int shmid;
@ -32,7 +32,6 @@ int main( int argc, char **argv)
cbreak() ; /* lecture non bufferisee */ cbreak() ; /* lecture non bufferisee */
key_t sem_key_data = MUTEX_DATA; key_t sem_key_data = MUTEX_DATA;
key_t sem_key_glob = MUTEX_GLOB;
key_t sem_key_tpa = MUTEX_TPA; key_t sem_key_tpa = MUTEX_TPA;
shmid = shmget(shm_key, sizeof(MEMP), 0766 | IPC_CREAT); shmid = shmget(shm_key, sizeof(MEMP), 0766 | IPC_CREAT);
@ -42,10 +41,7 @@ int main( int argc, char **argv)
if((memoireP = (MEMP *) shmat(shmid, 0 , 0766)) ==(void *) -1) { perror("shmat"); exit(EXIT_FAILURE); } if((memoireP = (MEMP *) shmat(shmid, 0 , 0766)) ==(void *) -1) { perror("shmat"); exit(EXIT_FAILURE); }
if((mutex_data = open_sem( sem_key_data)) == -1) { perror("open_sem"); exit(EXIT_FAILURE); } if((mutex_data = open_sem( sem_key_data)) == -1) { perror("open_sem"); exit(EXIT_FAILURE); }
if((mutex_tpa = open_sem( sem_key_tpa)) == -1) { perror("open_sem"); exit(EXIT_FAILURE); } if((mutex_tpa = open_sem( sem_key_tpa)) == -1) { perror("open_sem"); exit(EXIT_FAILURE); }
if((sem_global = open_sem( sem_key_glob)) == -1) { perror("open_sem"); exit(EXIT_FAILURE); }
// sem_global est un sémaphore à MAX_PROD entrants.
//P(sem_global);
P(mutex_tpa); P(mutex_tpa);
for(i = 0; i < MAX_PROD && memoireP->tpa[i] != -1 ; i++); for(i = 0; i < MAX_PROD && memoireP->tpa[i] != -1 ; i++);
if(memoireP->tpa[i] != -1) { V(mutex_tpa); exit(EXIT_FAILURE); } if(memoireP->tpa[i] != -1) { V(mutex_tpa); exit(EXIT_FAILURE); }
@ -84,9 +80,6 @@ int main( int argc, char **argv)
memoireP->tpa[i] = -1; memoireP->tpa[i] = -1;
V(mutex_tpa); V(mutex_tpa);
// On a fini, on libère l'accès à un autre producteur
//V(sem_global);
endwin(); endwin();
// On libère la mémoire de façon propre // On libère la mémoire de façon propre