“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 193 — #203
i
i
i
i
i
i
i
i
4.2 La programmation de base avec les fils
193
Il y a maintenant deux piles sémantiques (des « fils »). La première, qui contient
b=true, est prête. La deuxième, qui contient l’instruction if, est suspendue
parce que la condition d’activation (b déterminée) est fausse.
– L’ordonnanceur choisit le fil prêt. Après l’exécution d’un pas, nous obtenons
( {[], [if b then {Browse yes} end]},
{b = true} ∪ s )
Le premier fil est terminé (pile sémantique vide). Le deuxième fil est maintenant
prêt, parce que b est déterminée.
– Nous récupérons la pile sémantique vide et nous exécutons l’instruction if. Cela
donne
( {[{Browse yes}]},
{b = true} ∪ s )
Il reste un fil prêt. Continuer le calcul affichera yes.
4.2 LA PROGRAMMATION DE BASE AVEC LES FILS
Il y a beaucoup de nouvelles techniques de programmation qui deviennent possibles
dans le modèle concurrent par rapport au modèle séquentiel. Cette section examine
quelques-unes des plus simples, qui sont basées sur une utilisation simple des fils.
Nous étudions aussi l’ordonnanceur pour voir les opérations qui sont possibles sur les
fils eux-mêmes.
4.2.1 La création des fils
L’instruction thread crée un nouveau fil :
thread
proc {Count N} if N>0 then {Count N-1} end end
in {Count 1000000} end
Le nouveau fil s’exécute de façon concurrente avec le fil principal. La notation
thread ... end peut aussi être utilisée comme une expression :
{Browse thread 10 * 10 end + 100 * 100}
C’est du sucre syntaxique pour :
local X Y in
thread Y=10 * 10 end
X=Y+100 * 100
{Browse X}
end
© Dunod – La photocopie non autorisée est un délit
Précédent

- 208/370

Suivant