## page was renamed from Sistemi Operativi/Esercizi == Alcuni esercizi per mettersi alla prova, per grado crescente di difficoltà == ---- Scrivere un programma che crea 5 Thread a cui deve essere assegnato un ID differente. Ogni thread stampa ciclicamente il proprio ID su standard output. Ogni stampa deve essere effettuata su una singola linea e non deve essere interrotta dalle stampe degli altri thread. ---- Ricorse condivise: Si vogliono sincronizzare dei threads "Utilizzatore" sull'utilizzo di una struttura dati condivisa tipo "Risorsa". In particolare, si deve definire: - una classe Risorsa (un JTCMonitor) che fornisce i metodi necessari per utilizzare una risorsa. Nello specifico, una risorsa può essere utilizzata solo se non è già in uso da parte di un altro thread. Si deve implementare un metodo "bool utilizza()" che restituisce un valore true (ed occupa la risorsa) se questa è disponibile all'utilizzo, altrimenti ritorna false. - una classe Utilizzatore (un JTCThread) che ad intervalli casuali tenta di accedere alla struttura dati condivisa, costituita da un array di oggetti di tipo Risorsa. Nello specifico, questo thread cerca di utilizzare la prima Risorsa disponibile nell'array delle risorse e stampa il numero della risorsa che è riuscito ad impegnare; se non trova risorse disponibili perchè tutte già impegnate, ritenta dopo un intervallo casuale. - una classe Visualizzatore (è un thread) che periodicamente visualizza a video lo stato della struttura dati condivisa (costituita da un array di oggetti di tipo Risorsa), stampando un carattere pari a '_' in corrisspondenza di una risorsa libera (nell'array delle risorse condivise) mentre un carattere pari a '#' in corrispondenza di una risora utilizzata. ---- Conto Bancario: Progettare un’applicazione che simuli l’implementazione di un conto bancario, quindi programmare le classi (monitor e threads) per la gestione delle operazioni di prelievo e deposito su un conto. In particolare, si deve prevedere: * una classe ContoBancario che mette a disposizione operazioni per o depositare una certa somma sul conto o prelevare una somma dal conto (solo se la somma è disponibile, il conto non ammette la possibilità di andare "in rosso") o verificare il saldo corrente (cioè quanto c'è sul conto bancario allo stato attuale) * una classe Correntista che è il thread autorizzato ad effettuare operazioni di deposito e prelievo sul ContoBancario * una classe Controllore che è il thread autorizzato ad effettuare operazioni di controllo sul saldo attuale del conto * un main che avvia l'applicazione, creando un ContoBancario, più threads di tipo Correntista che accedono allo stesso conto ed un thread di tipo Controllore ---- Provare a svolgere da soli la traccia "Il gatto e il topo" [[https://www.mat.unical.it/informatica/Sistemi%20Operativi?action=AttachFile&do=view&target=gattoTopo.zip|download]]