 |
|  |
 |
carlo88 |
Implemetare semaforo generalizzato con monitor |
14-04-2012 15:32 |
|
 |
carlo88 |
.amico.
Registered: May 2009
Posts: 20 (0.00 al dì)
Location: buccinasco
Corso: informatica
Anno: secondo
Time Online: 6:55:40 [...]
Status: Offline
Edit | Report | IP: Logged |
Implemetare semaforo generalizzato con monitor
Ciao a tutti,
ho bisogno di un aiuto per implementare un semaforo generalizzato attraverso un monitor. Bruschi spesso lo mette nel compitino e dato che a lezione non mi sono chiarito completamente le idee volevo sapere se ho fatto giusto.
monitor semaforo
int sem
condition semaphore
#DOWN
sem = sem -1
if (sem < 0) then wait(semaphore)
#UP
sem = sem +1
if (sem <= 0) then signal(semaphore)
quindi uso la variabile intera sem come contatore e se ha un valore negativo significa che c'è qualche processo in coda altrimenti se >=0 significa che è libero quindi alzo il semaforo.
Potete confermarmi se ho capito bene?
Grazie 
Last edited by carlo88 on 16-04-2012 at 14:34
|
14-04-2012 15:32 |
|
|
|  |
 |
Kons |
più o meno sì,
... |
16-04-2012 15:16 |
|
 |
Kons |
.novellino.
Registered: Jan 2012
Posts: 2 (0.00 al dì)
Location:
Corso: Informatica
Anno:
Time Online: 0:36:10 [...]
Status: Offline
Edit | Report | IP: Logged |
più o meno sì,
il valore sem è quello che avrebbe il semaforo, la coda (contare sotto lo zero) ti serve perchè altrimenti perdi i processi in attesa dopo il primo in quanto daresti un solo signal.
pid -- val sem -- esito
P0 -> 0 -> permesso
P1 -> -1 -> wait
P2 -> -2 -> wait
end P0 -> -1 -> signal a P1
end P1 -> 0 -> signal a P2
end P2 -> 1 -> monitor libero
se dopo "end P0" arrivasse un altro processo P3 verrebbe messo in coda in quanto sem è -1.
Se invece non andassi sotto lo zero, al primo signal(quello di P0 a P1) incrementeresti sem che andrebbe a 1 nonostante ci siano ancora processi in coda.
L'arrivo del processo P3 in questo caso causerebbe probabilmente un'invasione di zombie.
Last edited by Kons on 16-04-2012 at 15:20
|
16-04-2012 15:16 |
|
|
|  |
 |
delca85 |
La up, non dovrebbe essere implementata così:
... |
09-04-2013 15:11 |
|
 |
delca85 |
.fedelissimo.
Registered: Oct 2012
Posts: 42 (0.01 al dì)
Location:
Corso: Informatica
Anno: Primo
Time Online: 11:41:22 [...]
Status: Offline
Edit | Report | IP: Logged |
La up, non dovrebbe essere implementata così:
code: if (sem < 0) then signal(semaphore)
else sem++;
?
Sicuramente sono io a non aver capito bene, ma io la farei così perché altrimenti, se un processo, che era in coda, prende il controllo del monitor, ha comunque incrementato il valore del semaforo, anche se non è più "verde".
E' una stupidaggine?
|
09-04-2013 15:11 |
|
|
|  |
 |
All times are GMT. The time now is 17:57. |
|
|
 |
|
 |
|
|
|  |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|