Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente |
informatica:sol:laboratorio17:esercitazionib:esercitazione8 [05/04/2017 alle 14:41 (8 anni fa)] – Massimo Torquati | informatica:sol:laboratorio17:esercitazionib:esercitazione8 [26/04/2017 alle 15:29 (8 anni fa)] (versione attuale) – Massimo Torquati |
---|
===== Esercizio 1 ===== | ===== 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 N che corrisponde al numero totale di messaggi che i produttori producono concorrentemente nella coda (ogni produttore produce N/M messaggi se M divide N). 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. | 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 ===== | ===== Esercizio 2 ===== |
| |
| Scrivere una versione concorrente del programma dell'[[informatica:sol:laboratorio17:esercitazionib:esercitazione3|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. |