Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio12:esercitazioni:esercitazione8

Esercitazione 8

Questa esercitazione si concentra sui thread POSIX.

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 un array map di NMAX posizioni, contenente in ogni posizione un colore fra RED, BLU, GREEN, WHITE, BLACK, oppure l'indicazione di nessun colore NOCOLOR. L'array e' condiviso 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 una posizione i fra 0 ed NMAX - 1 ed un colore col ed assegnano a map[i] il colore col. Ogni lettore effettua un ciclo infinito in cui ad ogni iterazione conta il numero di occorrenze del proprio colore di riferimento nell'array e lo stampa sullo standard output.

Si richiede che piu' lettori possano accedere contemporaneamente all'array map 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 all'array da parte dei due scrittori e neppure da parte di uno scrittore ed i thread lettori.

informatica/sol/laboratorio12/esercitazioni/esercitazione8.txt · Ultima modifica: 04/05/2012 alle 07:37 (10 anni fa) da Susanna Pelagatti