URL: https://linuxfr.org/forums/programmation-c--2/posts/semaphore-en-c Title: Sémaphore en C Authors: Shayan Date: 2016年12月23日T22:17:24+01:00 License: CC By-SA Tags: Score: -3 Bonjour, On nous a demandé de programmer en C un modèle Allocateurs de ressources en C : on a un tableau de ces ressources , et N processus qui veulent utiliser chacun une ressource .La demande ce fait l’aide d’une fonction Allouer qui lui renvoie le numéro de la ressource qui lui a été affectée. Le processus doit libérer la ressource à la fin de son travail à l’aide de la procédure Restituer. Le prof nous demande de faire un jeu d'essai avec au minimum 3 processus . Voila mon code pour le moment ```C #include #include #include #include #include #include #include /* semget, semctl, semop */ #include /* ftok */ #include #include /* malloc */ #include /* perror, printf */ #include /* errno */ /*Clés des sémaphores*/ #define SNlibre 13 // Sémaphore qui represente le nombre de machine libre #define Mutex 12 // Sémaphore d'exlusion mutuelle entre les deux procedure allouer et restituier /*Les variables globales*/ #define N 3//nombre de processus typedef enum boul {true, false} boul; boul booleen ; boul mdispo[3]={faux};//toutes les machine sont disponible au début /********P(m)********/ int P (int m) { struct sembuf operation; operation.sem_num = 0; operation.sem_op = -1; operation.sem_flg = 0; return semop (m , &operation , 1); // effectue 1 seule opération sur le sémaphore } /********V(m)********/ int V (int m) { struct sembuf operation; operation.sem_num = 0; operation.sem_op = +1; operation.sem_flg = 0; return semop (m , &operation , 1); // effectue 1 seule opération sur le sémaphore } /***Fonction Allouer*****/ /*Cette fonction retourne le numero de la machine alloué*/ int Allouer() { int num =0; P(Mutex); P(SNlibre); while (mdispo[num]==true) num++; mdispo[num]=false; V(Mutex); return num; } /***Procedure Restituer*****/ /*Procedure pour restituer la machine de numéro "num" après son usage*/ void Restituer (int num) { P(Mutex) ; mdispo[num] = false ; V(Mutex) ; V(Nlibre) ; } int main() { pid_t pidFils[5]; int i,j; for (i=0; i<2; i++) {//4 proessus pid_t pid = fork(); if (pid ==0) { Allouer(j); printf("Le processus %d utilise la machine numero %d \n\n",pid,j); Restituer(j); } else { pidFils[i] = pid; } } for (i=0; i<4; i++) { int status; waitpid(pidFils[i], &status, 0); // printf("pidFils[%d] = %d (%d)\n", i, pidFils[i], status); } return 0; } ``` La je suis bloqué ! je ne sais pas si ce que j'ai fait est juste et qu'est ce que je doit mettre entre l'alloue de la ressource et ça restitution ? Merci d'avance Cordialement

AltStyle によって変換されたページ (->オリジナル) /