Sémaphores en C

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
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
#include<sys/sem.h> /* semget, semctl, semop /
#include<sys/ipc.h> /
ftok /
#include<sys/shm.h>
#include <stdlib.h> /
malloc /
#include <stdio.h> /
perror, printf /
#include <errno.h> /
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; // structure prédéfinie en sem.h
operation.sem_num = 0;   // numéro de sémphore concerné par l'opération : notre sémaphore est le premier est le seul
operation.sem_op = -1;   /*décrit l'opértation à effectuer sur le sémphore==> décrémmente la valeur du sémaphore de 1 s'il est différent de 0.
                          Dans le cas contraire, le processus appelant est bloqué et placé dans une file d'attente liée
                          au sémaphore ;*/
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; // structure prédéfinie en sem.h
operation.sem_num = 0;   // numéro de sémphore concerné par l'opération
operation.sem_op = +1;   /*décrit l'opértation à effectuer sur le sémphore==>incremente la valeur du sémaphore de 1 s'il n'y a pas de
                          processus dans la file d'attente. Dans le cas contraire, ce sémaphore reste inchangé et on libère le
                          premier processus de la file d'attente*/
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()
{
    
    return 0;
}

La je suis bloqué ! je ne sais pas comment faire un jeu d’essai (3 processus ).Et si un processus alloue une ressource quand est ce qu’il vas la libérer J’ai penser à faire une boucle de fork() mais je ne sais pas si c’est juste ou non ?

Merci d’avance

Coedialement

Help ! :sob: