next up previous
Next: Parte VII: creiamo un Up: Parte VI: creiamo un Previous: Il thread per il


Gestione delle risorse condivise

Un altro aspetto fondamentale è la gestione corretta dell'accesso alle risorse condivise. In particolare due sono i punti a cui porre attenzione:

Nel primo caso significa che l'accesso alla struttura dati box di un oggetto di tipo MessageBox deve essere garantita thread-safe. In particolare, le operazioni che rimuovo (readMessage) e aggiungono messaggi (writeMessage) in una stesso box devono essere effettuate in mutua esclusione se eseguite in thread diversi. A tal fine una semplice soluzione è quella di dichiarare tali metodi synchronized visto che l'accesso al struttura dati box avviene esclusivamente tramite questi metodi.

Il secondo caso significa che anche l'accesso alla struttura dati listOfMessageBox di un oggetto di tipo ChatRoom deve essere garantita thread-safe. In particolare, le operazioni che aggiugono o rimuovono un utente (addUser e removeUser) devono essere effettuate in mutua escluzione tra di loro e anche rispetto le operazioni di consegna di un messaggio nelle caselle di un utente (send2All e send2U). Anche in questo caso, una prima e semplice soluzione è quella di dichiarare synchronized tutti i metodi della classe ChatRoom. Si noti, però, che in questo modo anche l'esecuzione delle operazioni di consegna di un messaggio nelle caselle di un utente eseguita su thread diversi è effettuara in mutua esclusione, cosa non strettamente necessaria. Infatti, durante la consegna, è sufficiente garantire che due esecuzioni dell'operazione di readMessage sulla stessa casella siano eseguite in mutua esclusione, già garantito dal fatto che il metodi readMessage è dichiarato synchronized come abbiamo descritto nel primo caso. Una possibile soluzione alternativa è descritta nella Sezione 3.2.


next up previous
Next: Parte VII: creiamo un Up: Parte VI: creiamo un Previous: Il thread per il
Baldoni Matteo 2003-05-08