Ingénieur qualité
Exercice :
Soit l’exemple de transfert entre deux comptes bancaires réalisé par la procédure Dépôt et l’exemple de calcul de la somme des soldes de deux comptes réalisée par la procédure ImpSomme.
procedure Dépôt(num, Montant) procedure ImpSomme(Compte1,Compte2) begin begin
Start; Start; temp := Read(Comptes(num)); temp1 := Read(Comptes(Compte1)); temp := temp + Montant; print(temp1);
Write(Comptes(num),temp); temp2 := Read(Comptes(Compte2));
Commit; print(temp2); end; temp1 := temp1 + temp2; print(temp1); end;
a) Supposons le client 1 dépose 1000 dans le compte 13 et que le client 2 y dépose 1500. Au départ le compte 13 a un solde de 10000. Chaque client invoque le programme Dépot en créant une transaction, respectivement T1 et T2. L’exécution simultanée de T1 et T2 se passe comme suit (on n’indique que les opérations communiquant avec la base de données).
Exécution 1:
Read1(comptes(13)) ;
Read2(comptes(13)) ;
Write2(comptes(13), 11500 );
Commit2;
Write1(comptes(13), 11000);
Commit1;
- Quel est le résultat de cette exécution ?
- Expliquez pourquoi cette exécution est ou n’est pas recouvrable, sans cascade, stricte.
b) Supposons maintenant que les comptes 7 et 8 ont des soldes de 20000 et que le client 1 imprime les soldes des deux comptes en utilisant la procédure ImpSomme (transaction T1). En même temps, le client 2 transfère 1000 du compte 7 vers le compte 8 (transaction T2) en utilisant la procédure Transfert suivante :
procedure Transfert(Compte1, Compte2, Montant) begin Start; temp := Read(Comptes(Compte1)); temp := temp - Montant;
Write(Comptes(Compte1),temp);
temp := Read(Comptes(Compte2)); temp := temp + Montant;
Write(Comptes(Compte2),temp);
Commit; end; L’ordonnancement des opérations est donné par l’exécution suivante.
Exécution 2:
Read2(Comptes(7));