Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio15:esercitazionib:esercitazione8

Esercitazione 8

Questa esercitazione si concentra sui thread POSIX. Quando e' richiesto di generare casualmente dei valori e' necessario usare funzioni thread safe (la rand() non lo e' leggere il man).

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 il 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: Problema dei lettori e degli scrittori

Si consideri una lista di interi contenente per elemento un colore fra RED, BLU, GREEN, WHITE, BLACK, oppure l'indicazione di nessun colore NOCOLOR. La lista e' condivisa fra 5 thread lettori e 2 thread scrittori. Ogni thread lettore ha un colore di riferimento fra quelli ammessi.

I thread scrittori effettuano un ciclo infinito in cui generano casualmente un colore e lo inseriscono in lista.

Ogni lettore effettua un ciclo infinito in cui ad ogni iterazione conta il numero di occorrenze del proprio colore di riferimento nella lista e lo stampa sullo standard output.

Si richiede che piu' lettori possano accedere contemporaneamente alla lista per leggerne i valori. L'esecuzione dei thread scrittori deve invece avvenire in mutua esclusione con tutti gli altri thread. In particolare, non puo' esserci accesso contemporaneo alla lista da parte dei due scrittori e neppure da parte di uno scrittore e di uno (o piu') thread lettori.

informatica/sol/laboratorio15/esercitazionib/esercitazione8.txt · Ultima modifica: 30/03/2015 alle 13:19 (9 anni fa) da Susanna Pelagatti