next up previous contents index return to home!
Next: Indice analitico Up: Multithreading Previous: Architettura Client-Server   Indice   Indice analitico

Esercizi

Esercizio 6.1   Si risalga al file include in cui è definita la macro
PTHREAD_MUTEX_INITIALIZER e si verifichi la sua consistenza con la definizione della struttura pthread_mutex_t.

Esercizio 6.2   Implementare una mailbox tra due thread usando il costrutto semaforico sem_t, e le primitive sem_wait e sem_post. Estendere a una mailbox condivisa fra più lettori/scrittori, utilizzando un mutex.

Esercizio 6.3   Scrivere un programma che realizzi il gioco del tris, in cui ci sono 2 thread giocatori e un thread arbitro. La struttura dati board rappresenta la tavola da gioco ed è protetta da un semaforo di mutua esclusione. I thread si sincronizzano fra loro tramite variabili condition.

Esercizio 6.4   Simulare il famoso problema dei filosofi a tavola tramite dei thread. In un tavolo circolare siedono $N$ filosofi, con $N$ pari, e ci sono $N/2$ coltelli e $N/2$ forchette (che rappresentano le risorse condivise). Altrnativamente, sul tavolo sono disposti un filosofo, un coltello, un filosofo, una forchetta, un filosofo, un coltello, ecc. Ogni filosofo per mangiare ha bisogno sia del coltello che della forchetta che stanno ai suoi lati. Nel nostro programma, ogni filosofo è rappresentato da un thread diverso. Ogni thread acquisisce la risorsa ``coltello'' e la risorsa ``forchetta'' (non necessariamente in quest'ordine), e quindi può cominciare a mangiare. Dopo aver finito, rilascia le due risorse. C'è il pericolo di deadlock? se si, qual'è la condizione che porta al deadlock? Qualè la politica che sicuramente evita il deadlock? Implementare il programma e verificare entrambe le politiche.


next up previous contents index
Next: Indice analitico Up: Multithreading Previous: Architettura Client-Server   Indice   Indice analitico
Giuseppe Lipari 2002-10-27