Estendere l'Esercizio 1 dell'Assegnamento8 (M thread produttori ed N thread consumatori) in modo tale da gestire il segnale SIGUSR1. In particolare, se il processo riceve il segnale SIGUSR1 dovra' essere stampato sullo standard output: 1) la lunghezza corrente della coda, 2) gli elementi che sono nella coda in quel momento.
SUGGERIMENTO: utilizzare un thread dedicato che fa da gestore unico del segnale SIGUSR1 utilizzando la chiamata di libreria sigwait
.
Supponiamo di dover implementare un server concorrente che fornisce il servizio di repository di oggetti. Le richieste servite dal server hanno il formato: <op, <key, object». L'operazione op puo' essere: GET, PUT, REMOVE, UPDATE. key e' una chiave numerica (es. 1, 1000, 200, …), mentre object è una sequenza di bytes (>0) non tipata (un oggetto puo' essere un file, un area di memoria, etc.). PUT inserisce l'object con la chiave key nel repository, GET permette di recuperare l'oggetto fornendo la chiave, REMOVE di cancellare l'oggetto con la data chiave ed infine UPDATE di aggiornare l'oggetto memorizzato nel server. Nell'implementazione deve essere utilizzata come struttura dati una tabella hash (ad esempio questa ).