Suppression de la sémaphore globale
parent
96f0f537ed
commit
6ad5d67c7d
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue