• Aucun résultat trouvé

Th´eorie et pratique de la concurrence – Master 1 II TP 2 : Sections critiques (preuves)

N/A
N/A
Protected

Academic year: 2022

Partager "Th´eorie et pratique de la concurrence – Master 1 II TP 2 : Sections critiques (preuves)"

Copied!
2
0
0

Texte intégral

(1)

Th´eorie et pratique de la concurrence – Master 1 II TP 2 : Sections critiques (preuves)

Exercice 1 : Variante de l’algorithme de Dekker

Soit la variante suivante de l’algorithme de Dekker, qu’on appellera Flekker o`u les instructions des lignesp6 etq6 ont ´et´e chang´ees :

boolean D1 := False // variables partag´ees boolean D2 := False

int turn := 1 -- Processus P1 loop forever : p1: section NC p2: D1 := True

p3: while (D2 == True) : p4: if (turn == 2) p5: D1 := False

p6: await (D2==False) /* chang´ee */

p7: D1 := True p8: section critique p9: turn := 2

p10: D1 := False

-- Processus P2 loop forever : q1: section NC q2: D2 := True

q3: while (D1 == True) : q4: if (turn == 1) q5: D2 := False

q6: await (D1==False) /* chang´ee */

q7: D2 := True q8: section critique q9: turn := 1

q10: D2 := False

1. Mod´elisez l’algorithme ci-dessus en Promela et montrez avec Spin qu’il satisfait la pro- pri´et´e d’exclusion mutuelle.

2. Prouvez formellement que l’algorithme satisfait la propri´et´e d’exclusion mutuelle.

3. L’algorithme de Dekker satisfait la propri´et´e d’absence de famine et d’attente born´ee sous hypoth`ese d’´equit´e des processus et en supposant que toute section critique termine.

Qu’en est-il de l’algorithme Flekker ? Justifiez votre r´eponse en utilisant Spin.

(2)

Exercice 2 : Algorithme de Doran et Thomas Prouvez la correction de la variante suivante de l’algorithme de Dekker :

boolean D1 := False // variables partag´ees boolean D2 := False

int turn := 1 -- Processus P1 loop forever : p1: section NC p2: D1 := True

p3: while (D2 == True) : p4: if (turn == 2) p5: D1 := False p6: await (turn==1) p7: D1 := True

p8: await (D2 == False) p9: section critique p10: D1 := False p11: turn := 2

-- Processus P2 loop forever : q1: section NC q2: D2 := True

q3: while (D1 == True) : q4: if (turn == 1) q5: D2 := False q6: await (turn==2) q7: D2 := True

q8: await (D1 == False) q9: section critique q10: D2 := False q11: turn := 1

Références

Documents relatifs

Ainsi au mˆeme moment on peut avoir un processus de type I qui parcourt la liste avec plusieurs processus de type S, en revanche si un processus de type D a acc`es ` a la liste,

Donner des formules de LTL qui formalisent les propri´ et´ es suivantes - pr´ ecisez quelles sont les propositions atomiques dont vous avez besoin :.. Deux feux de croisements ne

Le premier thread attend que x1 est true, et le mets ` a false, ensuite attend que x2 soit true et le mets ` a false, et ensuite affiche un message, remet les drapeaux ` a true et

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. Exercice 4: Le train

Chaque voiture sera un thread diff´ erent, qui, une fois pass´ ee sur le pont, recommence toujours dans la mˆ eme direction2. Modifiez votre solution pour permettre au plus 4

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