Sincronizzazione di processi tramite l'uso dei semafori

superpisu
mi è capitato questo esercizio..mi aiutate a risolverlo anche in pseudo codice?

In una palestra si impartiscono lezioni di step.
Per accedere ad una tale lezione un utente deve procurarsi un bilanciere e una pedana e quindi deve incontrarsi con un istruttore, se l'istruttore è impegnato in un'altra lezione l'utente deve attendere che l'istruttore finisca la sua lezione.
L'ingresso e l'uscita della palestra permettono il passaggio di un solo utente alla volta.
Dopo aver identificato le regioni critiche e i procesi coinvolti nel problema scrivere il codice dei processi stessi sapendo che nella palestra sono disponibili solo M bilancieri ed N pedane.

Grazie a tutti.

Risposte
enigmagame
Ciao,
quindi esiste solo un istruttore? inoltre M = N o sono diversi?

superpisu
ciao enigmagame, si esiste un solo istruttore e M ed N sono diversi..
questo diciamo è un problema molto ricorrente..poi diciamo che l'altro problema può essere:

uno studio di psicoanalisi è dotato di una sala di attesa con N sedie e della sala di psicoanalisi con il lettino del paziente.
se non ci sono pazienti da servire lo psicoanalista si addormenta nel lettino del paziente. se un paziente arriva alla studio quando tutte le sedie sono occupate, attende in piedi fuori allo studio. se lo psicoanalista è occupato, ma c'è una sedia libera, allora il paziente entra nella sala di attesa e si siede. se lo psicoanalista sta dormendo, il paziente lo sveglia.
sincronizzare i processi coinvolti in questa descrizione mediante l'uso di semafori.

ps non so quale dei due può essere più semplice, visto che sono un pò scarso con questi semafori eh eh,
pss ho l'esame martedì ed uno dei due sicuramente compare all'esame.

ti saluto mitico
ciao

enigmagame
Il secondo è il classio problema del "Barbiere che dorme" da riadattare al tuo caso, mentre il primo è diverso...
Ora devo scappare nel pomeriggio di posto una mia idea per il primo, e per il secondo...
Intanto ciao!

enigmagame
Vediamo il secondo problema...
Ho due processi:
- analista
- paziente (ovviamente questo può essere più di uno)
Utilizzo tre semafori cosi inizializzati:
- analista = 0
- paziente = 0
- mutex = 1
In fine ho queste due variabili:
- N = numero di sedie nella sala d'attesa
- n_p = numeri di clienti nella sala d'attesa
Ora veniamo al codice dell'analista:
analista {
    while(1) {
        P(paziente);
        P(mutex);
        n_p--;
        V(analista);
        v(mutex);
        stò_visitando();
    }
}


codice del paziente:
paziente {
    while(1) {
        P(mutex);
        if(n_p < N) {
            n_p++;
            V(paziente);
            V(mutex);
            P(analista);
            mi_sta_visitando();
        }
        else {
            attendo_in_piedi();
            V(mutex);
        }
    }
}


Che ne dici? Non ti è chiaro qualcosa? Fammi sapere...
Ciao! :D

superpisu
sei stato un grande enigmagame, va benissimo..
adesso se mi riesci a fare anche l'altro te ne sono infinitamente grato..
dai che poi ti porto a mangiare il pesce eh eh
ciao mitico..
ps se puoi cerca di farcela entro domani perchè martedì ho l'esame ok?
ciao emanuele

enigmagame
Per il primo ti do qualche dritta, poi prova a ragionarci da solo...
- Hai due processi, l'istruttore e l'utente (anche più di uno...)
- Il processo istruttore attende che ci l'utente...
- Il processo utente deve controllare di avere a disposizone un bilancere e una pedana, solo cosi puo partecipare
...

superpisu
ciao enigmagame..senti grazie per la dritta ma non ci riesco da solo..mi serve una mano a farlo questo esercizio e domani ho l'esame..se tu lo fai io capisco meglio perchè vedo come l'hai fatto e ci ragiono sopra..
ciao grazie

superpisu
vabbè ho capito..lasciamo perdere quello dei bilanceri e delle pedane..immaginavo fosse difficile..
però mi è uscito questo al compito che è sempre il problema del barbiere che dorme ma a differenza di quello di sopra questo ha il numero degli ombrelloni illimitato cioè che ogni bagnante ha sempre il suo ombrellone..
domanda: come dovevo modificare quel codice di sopra?

Il bagnino della spiaggia di sompazzo è addetto a due compiti: accompagnare un nuovo cliente all'ombrellone a lui assegnato, soccorrere bagnanti in difficoltà. Il bagnino, quando assopito lo sveglia, altrimenti attende che il bagnino si liberi. Un bagnante, se in difficoltà, urla dal mare chiedendo aiuto. Il soccorso ai bagnanti in difficoltà è, ovviamente, il compito che ha priorità. Comunque assumiamo per semplicità (anche se con qualche rischio) che il bagnino non interrompa mai l'azione in corso per intraprenderne un'altra.
Individuare le risorse condivise del problema, scrivere i processi che lo caratterizzano ed inserire le primitive semaforche che permettono a tali processi di sincronizzarsi e mutualmente escludersi in maniera corretta. Se può aiutare, è lecito fare assunzioni sulle politiche di scheduling dei semafori introdotti.

grazie ciao

enigmagame
No, non è difficile, solo che se non ci provi è dura impararli... in questo tipo di esercizi non c'è nulla di meccanico...
Prova a scrivere la tua soluzione che poi vediamo cosa fare...
Ciao!

superpisu
ascolta enigmagame, a me personalmente di imparare la sincronizzazione dei processi non me ne freca più di tanto, io devo fare questo esercizio perchè sta nel compito scritto che mi è stato assegnato, quindi se mi vuoi aiutare a farlo modificando il codice del barbiere che dorme che mi avevi mandato adattandolo all'esercizio del bagnino che dorme, te ne sono grato sennò grazie lo stesso del tempo che hai sprecato con me..ps preferirei vedere come modifichi il codice che imparo di più, piuttosto che mi ci metto io che non so farlo..che poi è quasi identico tra quello che mi hai fatto tu e quello che mi ha dato professore, soltanto che adesso il numero di ombrelloni è illimitato invece di essere finito per i clienti..
ciao

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.