-
Notifications
You must be signed in to change notification settings - Fork 0
/
gestione_semafori.c
54 lines (47 loc) · 1.36 KB
/
gestione_semafori.c
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
51
52
53
54
#include "gestione_semafori.h"
int sem_creazione(int chiave) {
int id = 0;
if((id = semget(chiave, 1, IPC_CREAT | IPC_EXCL | 0666)) == -1) {
printf("Erorre durante la creazione del semaforo con ID = %i.\n", chiave);
exit(EXIT_FAILURE);
}
return id;
}
int sem_recupero(int chiave) {
int id = 0;
if((id = semget(chiave, 1, 0)) == -1) {
printf("Erorre durante il recupero del semaforo con ID = %i.\n", chiave);
exit(EXIT_FAILURE);
}
return id;
}
void sem_init_disponibile(int id) {
if (initSemAvailable(id, 0) == -1) {
printf("Errore durante l'inizializzazione a disponibile del semaforo con ID = %i.\n", id);
exit(EXIT_FAILURE);
}
}
void sem_init_occupato(int id) {
if (initSemInUse(id, 0) == -1) {
printf("Errore durante l'inizializzazione a occupato del semaforo con ID = %i.\n", id);
exit(EXIT_FAILURE);
}
}
void sem_riserva(int id) {
if (reserveSem(id, 0) == -1) {
printf("Errore durante la riserva del semaforo con ID = %i e PID = %i.\n", id, getpid());
exit(EXIT_FAILURE);
}
}
void sem_rilascia(int id) {
if (releaseSem(id, 0) == -1) {
printf("Errore durante il rilascio del semaforo con ID = %i.\n", id);
exit(EXIT_FAILURE);
}
}
void sem_cancella(int id) {
if (semctl(id, 0, IPC_RMID) == -1) {
printf("Errore durante la rimozione del semaforo con ID = %i.\n", id);
exit(EXIT_FAILURE);
}
}