• Aucun résultat trouvé

Th´eorie et pratique de la concurrence – Master 1 Informatique TP 3 : Verrous et variables de condition en C

N/A
N/A
Protected

Academic year: 2022

Partager "Th´eorie et pratique de la concurrence – Master 1 Informatique TP 3 : Verrous et variables de condition en C"

Copied!
2
0
0

Texte intégral

(1)

Th´ eorie et pratique de la concurrence – Master 1 Informatique TP 3 : Verrous et variables de condition en C

Les variables de condition

La biblioth`eque Pthreads propose ´egalement un autre outil de synchronisation entre processus que l’on appelles les variables de condition. Une variable de condition est d´eclar´ee comme suit : pthread_cont_t (varcond);

Pour l’initialiser, on proc`ede ainsi : pthread_cond_init (&vacond,NULL);

Pour utiliser les variables conditionnelles, on dispose de trois fonctions qui doivent ˆetre appel´ees au sein d’une section critique cr´e´ee grˆace `a unmutex. La premi`ere fonction bloque lethread appelant et lib`ere le verrou. Lorsque lethread bloqu´e est ensuite r´eveill´e, il reprend la main sur le verrou.

Elle s’appelle de la fa¸con suivante :

pthread_cond_wait (&varcond,&verrou);

Le deuxi`eme argument correspond aumutexutilis´e pour la section critique. Un code utilisant cette fonction aura donc l’allure suivante :

pthread_mutex_lock(&verrou);

pthread_cond_wait (&varcond,&verrou);

pthread_mutex_unlock(&verrou);

Pour r´eveiller unthread bloqu´e sur une variable de condition, un autre thread peut faire : pthread_cond_signal(&varcond);

L`a aussi il estrecommand´ed’appeler cette fonction au sein d’une section critique prot´eg´ee par lemutex utilis´e par le thread en attente (dans l’exemple pr´ec´edent il s’agit dumutex verrou). On peut aussi r´eveiller tous lesthreads en attente grˆace `a la fonction :

pthread_cond_broadcast(&verrou);

Exercices

Exercice1: Les philosophes

Faire l’exercice 4 du TP pr´ec´edent.

Exercice2: M´emoire partag´ee simple

Reprendre l’exercice 4 du Tp1 en utilisant les variables de conditions pour attendre si le flag est mis `a vrai ou faux.

Exercice3: Probl`eme du bus

Nous consid´eronsN passagers et un bus ayantC places (avecC < N). Le comportement du bus est le suivant :

(a) Il attend queC passagers soient mont´es.

(b) Il part

(2)

(c) Il attend que lesCpassagers soient descendus du bus pour aller de nouveau au point (a).

Le comportement d’un passager est le suivant :

(a’) Il essaie de monter dans le bus, si il y a encore de la place, il peut monter sinon il doit attendre.

(b’) Une fois mont´e dans le bus, il fait le voyage dans le bus.

(c’) Il descend du bus et retourne en (a’).

Repr´esenter ce syst`eme avec des processus concurrents utilisant des verrous et des variables de condition.

Indication :Voil`a une fa¸con possible d’aborder le probl`eme :

– Les passagers pourront `a l’aide d’un compteur partag´e se compter de fa¸con `a savoir combien de passagers sont mont´es dans le bus et combien sont descendus. (Attention `a prot´eger l’acc`es `a ce compteur partag´e grˆace `a un s´emaphore binaire).

– Le dernier passager `a remplir le bus r´eveillera le bus pour lui signaler qu’il est plein.

– Le dernier passager `a descendre du bus r´eveillera le bus pour lui signaler qu’il est vide.

Remarques :Observer diff´erentes ex´ecutions et dire si un passager voulant monter dans le bus n’y arrive jamais. Si c’est le cas, savez-vous d’o`u vient ce probl`eme ? Si ce n’est pas le cas, pouvez expliquer pourquoi ?

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