Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio18:esercitazionib:esercitazione8

Esercitazione 8

Esercizio 1

Scrivere un programma C in cui si attivano M thread produttori ed N thread consumatori che condividono una coda (di lunghezza “infinita”). Il programma accetta come argomento anche un intero K che corrisponde al numero totale di messaggi che i produttori producono concorrentemente nella coda (ogni produttore produce K/M messaggi se M divide K). I consumatori leggono i messaggi dalla coda in un ciclo infinito fino a quando non ricevono un messaggio speciale che li fa terminare. Implementare la coda concorrente, ed il protocollo di terminazione senza usare la cancellazione esplicita dei threads.

Esercizio 2

Scrivere una versione concorrente del programma dell'Assegnamento3 Es.6 (My Word Count – versione semplificata del programma wc). Dovra' essere aggiunto un ulteriore parametro -t <numthreads> al programma, che specifica il numero di thread “Workers” da utilizzare per eseguire i calcoli. Ogni thread preleva da una coda condivisa in ingresso (inQ) il nome del file da esaminare e scrive in una coda condivisa di uscita (outQ) il risultato da produrre (cioe' il numero di linee e/o il numero di parole contenute nel file). Il thread main (che fa da “Master” thread) inserisce i nomi dei file da esaminare in inQ ed estrae i risultati da outQ provvedendo alla loro visualizzazione sullo standard output. I threads Workers termineranno la loro esecuzione se prelevano dalla coda inQ un opportuno messaggio. Testare con valgrind che non ci siano memory-leaks all'uscita del programma.

informatica/sol/laboratorio18/esercitazionib/esercitazione8.txt · Ultima modifica: 20/04/2018 alle 07:10 (6 anni fa) da Giuseppe Prencipe