Strumenti Utente

Strumenti Sito


lcs:lcs09:esercitazioni:esercitazione7

Esercitazione 7

Questa esercitazione si concentra sui thread POSIX e sulle SC relative che abbiamo presentato.

Esercizio 1: Produttore e consumatore

Scrivere un programma C con due thread: produttore e consumatore. Il thread produttore genera una sequenza di numeri casuali e li inserisce in una coda condivisa. Il thread consumatore estrae i numeri dalla coda e li stampa sullo standard output. In particolare, il thread produttore deve eseguire un ciclo infinito in cui genera un numero casuale r, lo inserisce nella lista e poi si metta in attesa per 2 secondi (con una sleep). Il thread consumatore esegue un ciclo infinito in cui estrae gli elementi dalla coda condivisa e li stampa sullo standard output.

Estensione: Fare in modo che produttore generi un numero fissato N di numeri casuali. Cancellare il consumatore quando il produttore ha terminato la generazione. Stampare l'esito di entrambi.

Esercizio 2: I filosofi a cena

N filosofi si incontrano a cena da Mario ed ordinano un piatto di spaghetti. Notoriamente gli spaghetti di Mario sono cosi' viscidi che possono essere mangiati solo usando due forchette, ma ogni filosofo ne ha una sola, percio' deve chiedere una forchetta in prestito ad uno dei suoi vicini. Tipicamente ogni filosofo e' impegnato ininterrottamente in una sequenza di 3 attivita': meditare (thinking), cercare di acquisire le forchette (hungry) e mangiare (eating).
Scrivere un programma C che attivi N thread filosofi (numerati da 0 a N-1) che eseguono il ciclo descritto. Ogni filosofo deve scrivere sullo standard output l'inizio di ogni fase (thinking, eating, hungry) ed il suo indice.

Esercizio 3: Il barbiere sonnolento

Si consideri il negozio di un barbiere, che dispone di:

  • Un certo numero (NSEDIE) di sedie riservate ai clienti in attesa;
  • una poltrona, normalmente occupata dal cliente che viene servito. Se non vi sono clienti da servire, la poltrona è occupata dal barbiere per sonnecchiare

Quando entra un cliente, si danno le seguenti possibilità:

  • se tutte le sedie sono occupate, il cliente se ne va rinunciando al taglio dei capelli;
  • se ci sono sedie disponibili e il barbiere è sveglio (cioè intento a servire un cliente), il cliente occupa una delle sedie libere e attende. I clienti in attesa vengono serviti con politica ARBITRARIA;
  • se il barbiere sta dormendo, il primo cliente che entra lo sveglia e viene immediatamente servito.

Il barbiere e i clienti sono thread, le sedie e la poltrona sono risorse. Programmare barbiere e clienti usando i thread POSIX.

lcs/lcs09/esercitazioni/esercitazione7.txt · Ultima modifica: 21/04/2009 alle 07:43 (15 anni fa) da Susanna Pelagatti