Parlando di threads...
che cosa si intende per semafori? mi potreste mostrare un esempio del loro funzionamento?
grazie
Parlando di threads...
che cosa si intende per semafori? mi potreste mostrare un esempio del loro funzionamento?
grazie
...e quando meno te lo aspetti potrebbe capitare qualcosa di bello, di più importante di quello che avevi programmato...
adesso non ho tempo per un esempio.
comunque un semaforo e' un flag che gestisce l'accesso a delle
risorse del sistema(in un caso semplice con soli 2 threads
con la risorsa che ne accetta solo uno per volta)
in altri casi(dove la risorsa puo avere piu' di un threads alla volta)
si parla di semaforo generalizzato che e' una variabile che puo'
raggiungere un valore massimo.
finche il valore e' al di sotto del massimo un threads puo'
accedere a quella risorsa.
nel caso semplice
un esempio:
abbiamo due processi A e B che vogliono accedere a C
C e' una locazione di memoria dove si
vuole che un processo(A) salvi un dato e un altro(B)
legga il dato per rielaborarlo.
capisci bene che C accetta solo uno alla volta e che se devono
essere sincronizzati A e B devono avere un flag altrimenti A
rischia di scrivere due(o piu') volte il dato prima che B legga
oppure B rischia di Leggere 2(o piu') volte il dato.
quindi Presupponendo che parta A(visto la logica)
il flag sara' =0
A dovra'
se il flag e' a 0
scrivere su C
cambiare il flag e metterlo a 1
altrimenti continua a controllare il flag finche'
sara' uguale a 0
B dovra'
se il flag e a 1
leggere da C
cambiare il flag e metterlo a 0
altrimenti continua.
A si chiama Produttore
B si chiama consumatore
il flag e' detto semaforo.
Ti ringrazio sei stato chiarissimo!![]()
...e quando meno te lo aspetti potrebbe capitare qualcosa di bello, di più importante di quello che avevi programmato...