Problema di impostazioni esercizi su Semaphore

di il
3 risposte

Problema di impostazioni esercizi su Semaphore

(ci ho messo un quarto d'ora per mettere la foto ma mi ha sempre dato problemi, se un moderatore è disponibile a modificarlo è meglio grazie)

raga se avete consigli su come svolgere questa tipologia di esercizi ve ne sarei davvero grato perchè mi stanno dando non poche difficoltà...e penso che prescinda il fatto di farne pochi o tanto... ho proprio problemi di impostazione.
Lasciando stare la parte dei Lock (che penso sia conseguenza di una buona impostazione generale dell'esercizio)

PS: non mi serve lo svolgimento, vorrei solo sapere se avete consigli su come procedere con questa tipologia di esercizi!

3 Risposte

  • Re: Problema di impostazioni esercizi su Semaphore

    NeO ha scritto:


    raga se avete consigli su come svolgere questa tipologia di esercizi ve ne sarei davvero grato perchè mi stanno dando non poche difficoltà...
    Come premessa, lo dico subito (come ho già detto in altre discussioni similari in passato): "modellare" aspetti/interazioni della vita reale come quelle tra studenti e docenti usando thread, lock, ecc... non è mai "facile" in generale.

    Innanzitutto bisogna vedere bene quali sono le entità coinvolte, che poi si tramuteranno in classi/oggetti. Studenti e docenti saranno dei thread e va bene. Ma per le aule? E serve magari anche modellare in classe/oggetto quella "area di attesa"?

    Il fatto che studenti e docenti siano dei thread vuol dire che ciascuno avrà un suo run() in cui esegue una serie di operazioni. L'altro aspetto importante è appunto capire QUALI siano le operazioni (e in quale sequenza) che ciascuno di essi deve fare e in che punto/i devono/possono eventualmente "bloccarsi" in attesa di qualcosa.
  • Re: Problema di impostazioni esercizi su Semaphore

    Grazie infinite della risposta!
    Ho controllato la soluzione del prof(trovata per caso) e crea 4 classi (5 considerando i lock).
    Aule(abstract), AuleSem, Docente e Studente!
    ora, dopo essermi demoralizzando un fottio, posso chiederti se mi conviene iniziare facendo schemi o qualcosa del genere? mi conviene partire dai thread o dalla astratta? la classe AuleSem che è la corposa e che è quella che contiene i semafori la faccio alla fine?
    so che è personale, mi piacerebbe però un tuo(vostro) parere!

    Grazie ancora per la cortese risposta
  • Re: Problema di impostazioni esercizi su Semaphore

    Senza avere imposizioni particolari e senza avere altri dettagli in più, a me verrebbe innanzitutto da pensare cosa deve fare lo studente come sequenza di operazioni. A livello concettuale:
    - si mette in attesa di essere chiamato
    - una volta chiamato, occupa l'aula per un tot di tempo
    - una volta finito, abbandona l'aula

    Tradotto in codice, il run() dello Studente potrebbe essere "ad occhio" qualcosa del genere:
    public void run() {
        Aula aula = areaAttesa.attendiChiamata();
    
        try {
            // qui si attende del tempo, es. con una sleep()
        } finally {
            aula.abbandona();
        }
    }
    Dove areaAttesa sarebbe un singolo oggetto "comune" a tutti quanti (studenti e docente). E attendiChiamata() è "bloccante" ovvero il thread (dello studente) va in sospensione finché qualcuno "chiama" lo studente. Quando attendiChiamata() si sblocca vuol dire che lo studente è entrato nell'aula ed infatti riceve un oggetto Aula. Attende del tempo e alla fine (in qualunque caso!) abbandona l'aula.
    E' un flusso molto semplicistico ma come concetto "fila" secondo me.

    Il punto/problema è fare il resto. Dal testo si evince che il docente-thread debba avere un ruolo "attivo" (avendo un suo flusso di esecuzione). Ed è il docente che deve scegliere (con la logica descritta) l'aula in cui far accomodare lo studente. Quindi la scelta dell'aula non può essere fatta solamente in quel attendiChiamata() (altrimenti a che servirebbe il docente come thread?).

    Visto così mi verrebbe da pensare di fare nell'oggetto areaAttesa una "coda" sincrona e bloccante. Gli studenti si accodano con ordine FIFO nella coda e stanno in attesa.
    Dall'altra parte, su un ALTRO flusso di esecuzione, il docente-thread estrae con ordine appunto FIFO il "prossimo" studente, determina l'aula e (attenzione!) fa in modo da assegnare l'oggetto Aula allo studente e lo sblocca, in modo che attendiChiamata() esca finalmente con quel oggetto Aula.
Devi accedere o registrarti per scrivere nel forum
3 risposte