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 41 42 43 44 45 46 47 48 49 50
|
int semid = sem_create(2);
#define mutex 0
sem_init(semid,mutex,1);
#define completed 1
sem_init(semid,completed,1);
/* fonctions permettant de manipuler les sémaphores */
int sem_create(int num_semaphores)
/* Crée un set de num_semaphores semaphores */
{
int semid;
if ((semid = semget(IPC_PRIVATE, num_semaphores, IPC_CREAT | 0666 )) < 0)
{
perror("Erreur en créant les sémaphores");
exit(1);
}
return semid;
}
void sem_init(int semid, int index,int value)
/* Initialise un sémaphore index du set semid à la valeur value */
{
if (semctl(semid,index,SETVAL,value) <0)
{
perror("Erreur en initialisant les sémaphores");
exit(1);
}
}
void signal_s(int semid, int index)
{
struct sembuf sb;
sb.sem_num = index;
sb.sem_op = 1;
sb.sem_flg = 0;
if (semop(semid,&sb,1) == -1)
{
perror("Erreur dans signal_s");
exit(1);
}
}
void wait_s(int semid, int index) {
struct sembuf sb;
sb.sem_num = index;
sb.sem_op = -1;
sb.sem_flg = 0;
if (semop(semid,&sb,1) != 0)
{
perror("Erreur dans wait_s");
exit(1);
}
} |
Partager