|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | ||
|
Member
Iscritto dal: Sep 2007
Messaggi: 59
|
Approccio a problemi di concorrenza
Salve,
Vi scrivo perchè a breve avrò un esame di SO nel quale ci sarà un esercizio di programmazione concorrente. Purtroppo guardando le dispense di esercizi fornite dal professore trovo molti problemi nell'approcciarmi a questi problemi, in particolare non so proprio come affrontare un ragionamento risolutivo. Ho anche notato che viene sempre richiesto l'uso di semafori, di questi ho capito la funzione di "mutua esclusione", ma mi sfugge il loro utilizzo per una sincronizzazione dei process. Per farvi capire la tipologia dei problemi che sono proposti: Quote:
Quote:
Mi scuso se la domanda è malposta o se fuoriluogo, ringrazio comunque anticipatamente tutti Ultima modifica di cifa : 17-01-2012 alle 00:10. |
||
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Dec 2007
Messaggi: 11
|
Te lo dico per esperienza (anche io ne so qualcosa di esami di SO) una volta che entri nel "meccanismo" dei semafori il risolvere gli esercizi proposti è una cavolata (o quasi).
Nel link [http://www.2shared.com/file/f5Q6qL2t/Altro.html] trovi delle dispense che ho fatto assieme ad un mio amico. Una parte sono solo teoria (c'è un pò di tutto: kernel, processi, thread, programmazione concorrente, deadlock e posticipazione indefinita, scheduling, gestione memoria), una parte solo di esercizi risolti (in alcuni ci sono degli errori stupidi come il nome sbagliato in alcuni semafori me ne sono accorto ora). Spero ti siano di aiuto Comunque per farla breve, breve, breve, anzi brevissima, il problema della mutua esclusione si verifica quando una qualsiasi risorsa viene letta/scritta da due "entità" (thread o chi per loro) in maniera contemporanea (parallelamente per intenderci). Le casistiche di "risoluzione" di questo tipo di problemi a mio avviso sono solamente 3 (o comunque riconducibili ad una di queste) 1) Mutua esclusione (MUTEX): l'accesso ad una risorsa è esclusivo, quando leggo/scrivo nessun'altro ha accesso (semaforo inizializzato a 1) Soluzione: // codice uguale ad entrambi i thread wait(S) <regione critica> signal(s) 2) Sincronizzazione completa: avvio il thread2 quando il thread1 ha finito di fare quel che deve fare (semafori incrociati uno inizializzato a 0 ed uno a 1) Soluzione: Thread 1 loop{ wait(S) <regione critica> signal(p) } Thread 2 loop{ wait(p) <regione critica> signal(s) } 3) Sincronizzazione: (può essere ricondotto al caratteristico problema del buffer circolare). Voglio che il thread1 faccia qualcosa ogni N giri del thread2 (inizializzo un semaforo a 0 ed uno ad N) (stesso codice del caso 2) Spero di esserti stato di aiuto e di non aver scritto troppe gastronerie. In bocca al lupo per l'esame |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:52.



















