Dani88
30-03-2012, 14:30
Ciao a tutti :)
Sto cercando di capire come implementare l'accesso ad una zona critica contenente una o più risorse in modo che un solo processo per volta possa accedervi, ovvero la mutua esclusione come molti di voi sapranno :)
I processi devono però comunicare tramite messaggi e non con variabili condivise.
Supponendo di avere "n" processi P1..Pn, io al momento ho pensato una cosa del tipo:
- io Pi chiedo a tutti gli altri: "ho bisogno della risorsa è libera?"
- via via che rispondono gli altri n-1 processi, se rispondono
>> SI: gli dico "la prendo io, ora è occupata" in modo che ognuno sappia che serve a me
>> NO: rinuncio per ora ad entrare e mando un messaggio a tutti gli altri dicendo che ho abbandonato l'intenzione di entrare
Se riesco ad entrare (ovvero tutte risposte SI) quando esco mando un messaggio a tutti dicendo "ho finito, la risorsa è libera"
Forse la cosa potrebbe essere resa più semplice se ogni processo se qualcuno sta usando la risorsa (settando a true ad esempio) così quando chiedo ottengo subito un no dal primo processo che risponde.
Se invece ottengo un si dicendogli che voglio usarla io l'altro setta a true la variabile che dice se la risorsa è in uso.
Sto dicendo delle cavolate o il metodo potrebbe funzionare, magari un po rivisto per migliorare fairness e prestazioni? :help:
Se qualcuno riuscisse a darmi due dritte mi farebbe un favore enorme :) :)
Grazie in anticipo a tutti!!
Sto cercando di capire come implementare l'accesso ad una zona critica contenente una o più risorse in modo che un solo processo per volta possa accedervi, ovvero la mutua esclusione come molti di voi sapranno :)
I processi devono però comunicare tramite messaggi e non con variabili condivise.
Supponendo di avere "n" processi P1..Pn, io al momento ho pensato una cosa del tipo:
- io Pi chiedo a tutti gli altri: "ho bisogno della risorsa è libera?"
- via via che rispondono gli altri n-1 processi, se rispondono
>> SI: gli dico "la prendo io, ora è occupata" in modo che ognuno sappia che serve a me
>> NO: rinuncio per ora ad entrare e mando un messaggio a tutti gli altri dicendo che ho abbandonato l'intenzione di entrare
Se riesco ad entrare (ovvero tutte risposte SI) quando esco mando un messaggio a tutti dicendo "ho finito, la risorsa è libera"
Forse la cosa potrebbe essere resa più semplice se ogni processo se qualcuno sta usando la risorsa (settando a true ad esempio) così quando chiedo ottengo subito un no dal primo processo che risponde.
Se invece ottengo un si dicendogli che voglio usarla io l'altro setta a true la variabile che dice se la risorsa è in uso.
Sto dicendo delle cavolate o il metodo potrebbe funzionare, magari un po rivisto per migliorare fairness e prestazioni? :help:
Se qualcuno riuscisse a darmi due dritte mi farebbe un favore enorme :) :)
Grazie in anticipo a tutti!!