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 endQue fait
Guess
? Comment s'exécute le fragment de code suivant : thread {Guess X} <s> endEn 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 ?