Files
PROG-CONCU/ANALE-1/EXO2/RESOLUTION/dijkstra.c
Ronan Fourneuve 7e12cccab5 Ajout Exo1
2025-08-08 10:56:50 +02:00

58 lines
1.0 KiB
C

#include <sys/sem.h>
#include <stdlib.h>
#include <stdio.h>
#include "dijkstra.h"
int sem_create(key_t cle, int initval) {
int semid;
union semun { int val; struct semid_ds *buf; ushort *array; } arg_ctl;
semid = semget(cle, 1 , IPC_CREAT|IPC_EXCL|0666);
if (semid == -1)
{
semid = semget(cle,1, 0666);
if (semid == -1)
{
perror("Erreur semget()");
exit(1);
}
}
else
{
arg_ctl.val = initval;
if (semctl(semid, 0, SETVAL, arg_ctl) == -1)
{
perror("Erreur initialisation sémaphore");
exit(1);
}
}
return(semid) ;
}
void P(int semid)
{
struct sembuf sempar;
sempar.sem_num = 0;
sempar.sem_op = -1;
sempar.sem_flg = 0;
if (semop(semid, &sempar, 1) == -1)
perror("Erreur operation P");
}
void V(int semid)
{
struct sembuf sempar;
sempar.sem_num = 0;
sempar.sem_op = 1;
sempar.sem_flg = 0;
if (semop(semid, &sempar, 1) == -1)
perror("Erreur opération V");
}
void sem_delete(int semid)
{
if (semctl(semid,0,IPC_RMID,0) == -1)
perror("Erreur dans destruction sémaphore");
}