• Aucun résultat trouvé

Th´eorie et pratique de la concurrence – Master 1 Informatique TP 2 : Programmation concurrente en Java (suite)

N/A
N/A
Protected

Academic year: 2022

Partager "Th´eorie et pratique de la concurrence – Master 1 Informatique TP 2 : Programmation concurrente en Java (suite)"

Copied!
2
0
0

Texte intégral

(1)

Th´eorie et pratique de la concurrence – Master 1 Informatique TP 2 : Programmation concurrente en Java (suite)

Exercice 1: Le dˆıner des philosophes

Le probl`eme du diner des philosophes est un probl`eme classique de partage de ressources en programmation concurrente. Ce probl`eme peut ˆetre r´esum´e de la fa¸con suivante. Il y a n philosophes qui se trouvent autour d’une table. Chaque philosophe a devant lui une assiette de spaghetti. Directement ` a gauche de chaque assiette se trouve une baguette pour manger (il y a donc n baguettes). Un philosophe fait deux choses : penser et manger. Pour manger, il a besoin des deux baguettes qui sont ` a cot´e de son assiette. Chaque philosophe agit de la fa¸con suivante : il pense, ensuite quand il a envie de manger il prend d’abord la baguette `a sa gauche, en- suite la baguette ` a sa droite. Quand il termine de manger, il rend les deux baguettes et il pense, etc.

Le but de cet exercice est de mod´eliser ce probl`eme du dˆıner des philosophes par un programme concurrent Java. Nous proc´ederons de deux fa¸con diff´erentes.

1. La premi`ere fa¸con consistera ` a mod´eliser les baguettes par une classe Baguette avec deux m´ethodes synchronized pour prendre et relacher la baguette et un bool´een sp´ecifiant si la baguette est libre ou non. L’attente et le r´eveil des processus philosophes se fera grˆace aux m´ethode wait et notify vues au TP pr´ec´edent. Quant au comportement des philosophes, il sera mod´elis´e par une classe Philosophe ´etendant la classe Thread.

(a) ´ Ecrivez les classes Baguette et Philosophe d´ecrites ci-dessus.

(b) Testez votre programme avec 5 philosophes.

(c) Essayez d’obtenir un deadlock en faisant ”dormir” le processus caract´erisant un philo- sophe `a un certain moment.

(d) Proposez une solution pour r´esoudre ce probl`eme d’inter-blocage.

2. La seconde m´ethode consistera ` a utiliser des s´emaphores pour repr´esenter les fourchettes.

Pour se faire, on utilisera la classe Semaphore du package Java java.util.concurrent (lisez la documentation avant de commencer ` a programmer).

(a) ´ Ecrivez la classe PhilosopheBis utilisant des s´emaphores pour les baguettes (n’oubliez pas que ces s´emaphores seront partag´es par diff´erents philosophes).

(b) Comme pour les questions pr´ec´edentes, testez votre programme avec 5 philosophes et essayer d’obtenir un deadlock.

Exercice 2: La piscine

Une piscine dispose d’un certain nombre N

c

de cabines et d’un certain nombre N

p

de paniers.

Un client qui se pr´esente ` a l’entr´ee de la piscine effectue les ´etapes suivantes : a. il doit attendre une clef de cabine,

b. il doit demander et obtenir un panier vide, c. il occupe la cabine pour se changer,

d. il lib`ere la cabine et la clef (et d´epose son panier plein au vestiaire), e. il va nager,

f. il cherche son panier plein au vestiaire et attend qu’une cabine se lib`ere, g. il prend une clef de cabine et occupe la cabine pour se changer, et h. lib`ere la cabine et rend la clef et le panier vide (et quitte la piscine).

Le but de cet exercice est de d´evelopper un programme concurrent simulant le comportement

des clients de cette piscine.

(2)

1. Cr´eer une classe Client ´etendant la classe Thread et dont la m´ethode run caract´erise le comportement d’un client de la piscine. Les paniers et les cabines seront repr´esent´es par deux s´emaphores semCabine et semPanier qui seront des champs de la classe Client (ces s´emaphores seront partag´es par tous les threads repr´esentant les clients de la piscine).

2. Tester votre programme avec diff´erents nombres de clients et diff´erents nombres de cabines et de paniers (le nombre de cabines et de paniers ´etant d´etermin´e par la valeur avec laquelle le s´emaphore correspondant est initialis´e). En particulier, essayer d’obtenir (en faisant dormir les threads ` a un certain endroit) un deadlock pour le cas o` u le nombre de cabines et plus petit que le nombre de paniers, lui mˆeme ´etant plus petit que le nombre de clients.

3. Dans le cas pr´ecis o` u il y a un deadlock, proposez une solution en modifiant le code des

clients sans sans changer les nombres de clients, paniers ou cabines. Indice : Vous pouvez

vous servir des m´ethodes propos´ees par la classe Semaphore.

Références

Documents relatifs

Modifier le code d´ ej` a ´ ecrit pour les classes Reader, Writer et Main pour qu’elles utilise la classe RWexclusive ` a la place de RWbasic.. Observer le comportement de

Dans ce Tp on impl´ ementera quelques algorithmes d’exclusion mutuelle sans utiliser les prim- itives de haut niveau comme les m´ ethodes synchronized ou les variables de

Le serveur stocke alors cette chaˆıne de caract` eres dans un objet de type ConcurrentBuffer Un client consommateur attend que le serveur lui envoie des chaˆınes de caract` eres qui

Le premier argument est l’adresse d’un descripteur de thread, le deuxi`eme argument (que nous mettrons toujours ` a NULL dans ces TP) est un attribut de thread de type pthread_attr_t

Dans cet exercice on souhaite mod´eliser ce probl`eme du dˆıner des philosophes par un programme en C dans leque chaque baguette sera repr´esent´ee par un verrou et chaque

La premi`ere n’autorisera pas un consommateur ` a lire une nouvelle donn´ee tant que la derni`ere donn´ee lue n’aura pas ´et´e vue par tous les consommateurs (le dernier

Les paniers et les cabines seront repr´esent´es par deux s´emaphores semCabine et semPanier qui seront des champs de la classe Client (ces s´emaphores seront partag´es par tous

Supposez qu’on dispose d’une seule salle de bain qui peut ˆetre utilis´ee par des hommes ou des femmes mais pas au mˆeme moment.. Programmez en utilisant les s´emaphores une