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
|
#include <sys/types.h> // Pour key_t
#include <sys/sem.h> // Pour la manipulation de semaphores
#include <sys/ipc.h> // Pour ftok()
/******************* Définition des constantes **/
// Chaine de reference pour la generation d'une clé : notre exécutable
const char REFERENCE [] = './demo';
const int DROITS = 0600;
const int NB_SEM_ELEM = 2;
const int SEM_ELEM_0 = 0;
const int SEM_ELEM_1 = 1;
/****************** Mise en place de nos variables **/
// Id de référence pour la génération d'une clé
int id_key(0);
// Création de notre sémaphore général contenant NB_SEM_ELEM ( = 2)
// sémaphores élémentaires
int semGene (semget(ftok(REFERENCE,(char)id_key++),NB_SEM_ELEM,IPC_CREAT|DROITS));
/****************** Définition des structures de manipulation des sémaphores **/
// Structure de prise d'un jeton sur le sémaphore élémentaire
// <SEM_ELEM_0> = premier sémaphore du sémaphore général <semGene>
struct sembuf reserverSemElem0 = {SEM_ELEM_0,-1,0}
// Idem sur le deuxième sémaphore élémentaire
struct sembuf reserverSemElem1 = {SEM_ELEM_1,-1,0}
struct sembuf libererSemElem0 = {SEM_ELEM_0,1,0} // reposer jeton
struct sembuf libererSemElem0 = {SEM_ELEM_1,1,0} // reposer jeton
/****************** Manipulation des sémaphores **/
// Récupération d'un jeton sur le sémaphore élémentaire 0
// du sémaphore général <semGene>
semop(semGene,&reserverSemElem0,1);
// Libération de la ressource
semop(semGene,&libererSemElem0,1);
... |
Partager