• Aucun résultat trouvé

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

Copied!
2
0
0

Texte intégral

(1)

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

Dans ce TP on utilisera deux autres moyens de synchronisation de threads en C : less´emaphores et levariables de condition.

On rappelle (sans explication) quelle sont les fonctions concern´ees. Pour les variables de con- dition :

pthread_cond_init (&varcond,NULL);

pthread_cond_wait (&varcond,&verrou);

pthread_cond_signal(&varcond);

pthread_cond_broadcast(&verrou);

Pour les s´emaphores :

sem_init(&sema,0, n);

sem_wait(&sema); /* P(sema) */

sem_post(&sema); /* V(sema) */

Exercices

Exercice1: Encore producteur-consommateur

(Pour ceux qui n’ont pas fait programmation syst`emes) On programmera encore un producteur et plusieurs consommateurs, cette fois `a l’aide des variables de condition. Comme dans le tp pr´ec´edent,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.

Exercice2: Encore le pont `a voie unique

On programmera ici le pont `a voie unique `a l’aide des s´emaphores. 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 s´emaphores.

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.

(2)

Exercice3: Programmation des s´emaphores avec les variables de condition Dans cet exercice il vous est demand´e d’impl´ementer les s´emaphores `a l’aide des variables de condition. Vous allez cr´eer un type s´emaphore de la forme suivante :

typedef struct sema{

pthread_mutex_t verrou;

pthread_cond_t varcond;

int compteur;

} semaphore;

Intuitivement le verrou sert `a prot´eger la valeur du compteur associ´ee au s´emaphore et la variable de condition est utilis´ee pour bloquer les threads qui tentent de prendre le s´emaphore alors que la valeur du compteur est `a 0.

1. Programmez les fonctions

int semaphore_init(semaphore *sem,int val) int semaphore_post(seamphore *sem)

int semaphore_wait(semaphore *sem)

de ce s´emaphore (qui correspondent aux fonction ´equivalentes pour les s´emaphore de la librairePthreads).

2. Testez votre version des s´emaphores en les utilisant pour impl´ementer le pont `a voie unique.

Exercice4: Le drapeau hollandais

Une collection de boules de couleur est r´eparti entre N processus. Il y a M ≥ N couleurs diff´erentes de boules. L’objectif est pour les processus d’´echanger des boules de sorte que quand l’algorithme termine, pour touti, le processusia toutes les boules de couleuri. Le nombre totale de boules est inconnu aux processus

Exercice5: Diffusion atomique

Soit un syst`eme avec un processus producteur et n processus consommateurs qui commu- niquent via un tampon ayantb cases. Le producteur d´epose des messages dans ce tampon et les consommateurs les prennent. Chaque message d´epos´e par le producteur doit ˆetre pris par tous lesnconsommateurs. En plus, chaque consommateur doit prendre les messages dans l’ordre dans lequel ils ont ´et´e d´epos´es. Toutefois, des consommateurs diff´erents peuvent prendre les messages

`

a des moments diff´erents. Par exemple, un consommateur peut prendre jusqu’`ab messages avant un autre, si ce dernier est lent.

Programmez en C une solution `a ce probl`eme en utilisant les s´emaphores.

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