TD 2 sur les threads

Objectifs : Les Threads – Synchronisation avec le mot-clé synchronized et les méthodes wait() et notify() de la classe Object.

Exercice 1 : Le dîner des philosophes

 Cinq philosophes sont assis en rond autour d'une table ronde.

Chaque philosophe passe sa vie alternativement à penser et à manger. Au centre de la table est déposé un immense plat de nouilles.

Malheureusement, le maître d'hôtel lorsqu'il a dressé la table a déposé sur celle-ci seulement 5 assiettes et 5 fourchettes et tout le monde sait que les philosophes utilisent deux fourchettes pour manger un plat de nouilles.

Une fourchette est placé entre chaque philosophe et comme chaque philosophe est bien élevé, il utilise uniquement la fourchette placée à sa droite et celle placée à sa gauche. Un philosophe ne prend pas une fourchette qui est déjà détenu dans la main d'un autre philosophe.

Une fois qu'il a mangé, un philosophe repose les deux fourchettes qu'il a utilisé.

1.1    Identifiez sur un schéma UML les différentes classes de l’application

1.2    Quel est le problème de synchronisation et où doit-on le gérer ?

1.3    Développer la première version de l’application.

1.4    Peut-il y avoir une situation d’inter blocage (aucun philosophe ne mange) ? Comment peut-on la corriger ?

 

Exercice 2 : Les lecteurs / rédacteurs

Dans ce problème, des lecteurs et des rédacteurs travaillent sur un texte.

A tout moment, si un rédacteur écrit, il doit être seul (pas d’autre rédacteur en train d’écrire et aucun lecteur en train de lire).

Les lecteurs, eux, peuvent lire en parallèle.

Les lecteurs et les rédacteurs lisent/écrivent pendant 500 ms et attendent pendant 500 ms.

1.5    Identifiez sur un schéma UML les différentes classes de l’application

1.6    Quel est le problème de synchronisation et où doit-on le gérer ?

1.7    Développer la première version de l’application.

1.8    Peut-il y avoir une situation de famine des rédacteurs (il y a toujours un lecteur en train de lire et donc les rédacteurs ne peuvent pas écrire) ?