Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio17:esercitazionib:esercitazione8

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
informatica:sol:laboratorio17:esercitazionib:esercitazione8 [05/04/2017 alle 14:39 (8 anni fa)] – creata Massimo Torquatiinformatica:sol:laboratorio17:esercitazionib:esercitazione8 [26/04/2017 alle 15:29 (8 anni fa)] (versione attuale) Massimo Torquati
Linea 3: Linea 3:
 ===== 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 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.
informatica/sol/laboratorio17/esercitazionib/esercitazione8.1491403189.txt.gz · Ultima modifica: 05/04/2017 alle 14:39 (8 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki