| LINF1251 - Page des travaux pratiques |
Dans cette séance, on va se familiariser avec l'utilisation de threads dans un programme. Nous verrons l'utilité du comportement dataflow des variables déclaratives. Enfin, nous aborderons le non-déterminisme
Threads.
Considérez les programmes ci-dessous et indiquez les valeurs affectées aux variables X, Y et Z en fin d'exéctution. Vérifiez alors dans le Browser.
local X Y Z in thread if X==1 then Y=2 else Z=2 end end thread if Y==1 then X=1 else Z=2 end end end
local X Y Z in thread if X==1 then Y=2 else Z=2 end end thread if Y==1 then X=1 else Z=2 end end X=2 end
Devinez...
Considérez la procédure suivante :
proc {Guess X}
if X==42 then skip else skip end
end
Que fait Guess ? Comment s'exécute le fragment de code suivant :
thread {Guess X} <s> end
En particulier, quand est-ce que <s> est exécuté ?
declare A B C D in
thread D=C+1 end
thread C=B+1 end
thread A=1 end
thread B=A+1 end
{Browse D}
Que vaut D ? Dans quel ordre les threads sont-ils créés ? Dans quels ordre sont-ils exécutés ?
deposer), une méthode pour retirer un montant passé en paramètre (retirer, et une méthode qui retourne le solde du compte (solde).{Delay X} où X est le nombre de milliseconde à attendre.
Effectuez ensuite un certain nombre d'opérations d'ajouts/retrait sur un compte, et ce, de facon concurrente, comme cela peut arriver dans le monde reel. Qu'observez-vous ? Est-ce normal ? Comment appèle-t-on ce phénomène ?