Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programmazione
concorrente
Riferimento
alla
slide:
AXO
-‐
03
-‐
Programmazione
concorrente.pdf
Per
l’implementazione
delle
funzioni
utilizzate
si
fa
riferimento
alla
libreria:
pthread.h
Processi
e
thread
possono
usare
entrambi
sia
i
mutex
sia
i
semafori,
poiché
queste
variabili
sono
associate
a
degli
handle
di
sistema
operativo,
ed
ogni
processo
o
thread
ne
possiede
gli
indirizzi.
Questa
è
la
ragione
per
cui
nelle
funzioni
riguardanti
mutex
e
semafori,
le
variabili
vengono
sempre
passate
per
indirizzo.
1
Programmazione
concorrente
AXO
Matteo
Guarnerio
Sincronizzazione
e
semafori
Il
semaforo
è
una
variabile
di
tipo:
sem_t
Per
utilizzarlo
è
necessario
inizializzarlo
con
la
funzione
apposita:
sem_init(&semaforo,
0,
valore)
dove
zero
è
lo
standard,
le
opzioni.
Il
valore
al
quale
è
inizializzato
il
semaforo
indica
il
numero
di
thread
che
possono
accedere
alla
sezione
critica.
Il
semaforo
assume
quindi
dei
valori,
che
indicano
il
numero
di
risorse
disponibili,
dai
quali
possiamo
capire
se
un
thread
può
proseguire
nell’elaborazione
o
si
deve
fermare:
Valore
del
semaforo
Significato
>
0
Ci
sono
risorse
disponibili.
=
0
Non
ci
sono
risorse
disponibili.
<
0
Non
ci
sono
risorse
disponibili.
Indica
quanti
thread
sono
in
attesa
che
una
risorsa
si
liberi.
Per
incrementare
e
decrementare
il
valore
di
un
semaforo
si
usano
le
seguenti
funzioni:
Funzione
Azione
sem_wait(&semaforo)
Decrementa
il
valore
del
semaforo
di
1
sem_post(&semaforo)
Incrementa
il
valore
del
semaforo
di
1
2