• Aucun résultat trouvé

Th´eorie et pratique de la concurrence – Master 1 Informatique TP 2 : Programmation concurrente en C (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 C (suite)"

Copied!
2
0
0

Texte intégral

(1)

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

Les mutexs

Les mutexs permettent de r´ealiser facilement l’exclusion mutuelle. Ils appartiennent `a la bib- lioth`eque Pthreads. On les appelle ´egalement verrous. Pour les utiliser, il faut, bien entendu, inclure la biblioth`eque :

#include <pthread.h>

Pour initialiser un mutex, on proc`ede comme suit : pthread_mutex_init (&lock , NULL);

Le premier argument correspond au verrou que l’on souhaite initialiser, quand au second, qui est mis `aNULL, il pr´ecise les attributs du verrou.

Pour ”prendre un verrou”, on fait : pthread_mutex_lock (&lock);

Et pour le lib´erer :

pthread_mutex_unlock (&lock);

Pour compiler vos programmes, n’oubliez pas de mettre l’option-lpthread

Exercices

Exercice1: 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 riz. 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- suitela 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 C. On mod´elisera les baguettes par des mutex. Chaque philosophe sera impl´ement´e par un thread.

1. Testez votre programme avec 5 philosophes.

2. Essayez d’obtenir un deadlock.

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

(2)

Exercice2: Encore producteur-consommateur Comme dans le Tp pr´ec´edent, on programmera un producteur et plusieurs consommateurs, de fa¸con cette fois de garantir l’exclusion mutuelle, `a l’aide des mutex. A un moment choisi au hasard, un producteur ajoute un entier choisi au hasard `a une file (FIFO). Chaque consommateur attend que la file ne soit pas vide, et ensuite il enl`eve l’entier de la tˆete de la file et il l’affiche, et il recommence du d´ebut.

Observez le comportement de votre programme. Est-ce que la famine peut encore se produire ?

Exercice3: Probl`eme du pont `a voie unique

Des voitures arrivant du nord ou du sud doivent passer un pont `a voie unique. Les voitures ayant la mˆeme direction peuvent passer le pont au mˆeme moment, mais les voitures ayant des directions oppos´ees ne le peuvent pas. Chaque voiture sera un thread diff´erent, qui, une fois pass´ee sur le pont, recommence toujours dans la mˆeme direction.

1. Programmez le code des processus voiture, ainsi que le code n´ecessaire `a leur synchronisation

`

a l’aide des mutex. V´erifiez la possibilit´e de famine. Est-ce votre programme peut produire un inter-blocage ?

2. Modifiez votre solution pour permettre au plus 4 voitures d’ˆetre sur le pont.

3. On souhaite maintenant garantir qu’il y aura une alternance entre voiture des deux sens (si il y a r´eguli`erement des voitures qui veulent entrer dans les deux directions). Pour cela, d´eveloppez une solution qui laisse au plus entrer 4 voitures sur le pont, si une voiture qui va dans la direction oppos´ee veut entrer.

Exercice4: Le train qui attend

Trois cars au d´epart de Marolles, de Villecresnes et de Santeny am`enent les ´etudiants `a la gare de Boissy Saint L´eger. L`a, un RER sp´ecial les attend, qui partira seulement apr`es l’arriv´es des trois cars, pour les amener `a l’amphi de IF1. R´ealisez ce sc´enario avec des threads, et utilisez des mutex pour la synchronisation.

Références

Documents relatifs

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

L`a aussi il est recommand´ e d’appeler cette fonction au sein d’une section critique prot´eg´ee par le mutex utilis´e par le thread en attente (dans l’exemple pr´ec´edent

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