Exercices du 6 avril 2005
Exercices IBD 1 / 2
Séance d'Exercices IBD N°3
Exercice1 : concurrence
Soit T1 et T2 les transactions suivantes:
Transaction T1
Read (a) a:=a+100;
write(a);
read(b) b:=b+100;
write(b);
Transaction T2
Read (a) a:=a*2;
write(a);
read(b) b:=b*2;
write(b);
a) Si la valeur initiale de a est 25 et celle de b est 25, quelles sont leurs valeurs de a et b si on
exécute les transactions à la suite, T1 puis T2.
b) Quelles sont les valeurs si on exécute T2 puis T1?
c) maintenant les deux transactions sont exécutées de façon concurrente de la façon suivante:
Transaction T1
Read (a) a:=a+100;
write(a);
read(b) b:=b+100;
write(b);
Transaction T2
Read (a) a:=a*2;
write(a);
read(b) b:=b*2;
write(b);
Si on considère les mêmes valeurs initiales qu'en a) quelles sont les valeurs de a et b à l'issue de l'éxécution des transactions?
Cette exécution entremêlée est elle correcte, pourquoi?
d) Si les deux transactions sont exécutées de façon concurrente de la façon suivante:
Transaction T1
Read (a) a:=a+100;
write(a);
read(b) b:=b+100;
write(b);
Transaction T2
Read (a) a:=a*2;
write(a);
read(b) b:=b*2;
write(b);
Si on considère les mêmes valeurs initiales qu'en a) quelles sont les valeurs de a et b à l'issue de l'exécution des transactions?
Cette exécution entremêlée est elle correcte, pourquoi?
Exercices du 6 avril 2005
Exercices IBD 2 / 2 Exercice2 : concurrence
Notre système utilise le protocole de verrous exclusifs avec libération explicite. Supposons l'exécution suivante des transactions T1 et T2:
Transaction T1 Transaction T2
t1 XRead (a)
t2 a:=a+100; XRead (a) t3 mise en attente t4 write(a);
t5
t6 XRelease (a) a:=a*2;
t7 write(a);
t8 XRelease (a) t9
t10 Xread(b)
t11 b:=b+100; Xread(b) t12 mise en attente t13 write(b);
t14
t15 XRelease (b) b:=b*2;
t16 write(b);
t17 XRelease (b)
a) Cette exécution se passe t'elle correctement? Quels sont les problèmes possibles en cas d'échec
de T1?
b) Proposez une solution à ce problème.
Exercice3 : concurrence
Soit les deux transactions T1 et T2.
T1:
Xread(a) a:=a+2;
Write(a);
Xread(b);
b:=b*3;
Write(b) XRealease(a) XRealease(b);
T2:
Xread(b) b:=b*2;
Write(b);
Xread(a);
a:=a+3;
Write(a) Xrealease(a) Xrealease(b);
Pouvez vous proposer une exécution concurrente pour ces deux transactions? Justifiez votre réponse.