Séance 14
Threads, concurrence déclarative et non-déterminisme.

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

Enoncés des exercices

  1. 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
    


  2. 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é ?


  3. Considérez le programme suivant :
    	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 ?

  4. Construisez une classe "CompteEnBanque", qui enregistre le montant présent sur un compte et propose une méthode pour déposer un montant passé en paramètre (deposer), une méthode pour retirer un montant passé en paramètre (retirer, et une méthode qui retourne le solde du compte (solde).
    Une exception est générée si on essaye de retirer plus d'argent que ce qu'il reste sur le compte.

    Supposez ensuite que, dans une banque, le temps entre la lecture du montant du compte et la mise à jour (suite à une opération de retrait ou d'ajout) prend un certain temps. Vous pouvez modélisez cela avec la procédure {Delay X}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 ?