“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 192 — #202
i
i
i
i
i
i
i
i
192
4
• La programmation concurrente dataflow
mémoire à affectation unique
(,E)
ST 1
(thread end, E)
ST
...
ST
1
n
ST n
...
mémoire à affectation unique
Figure 4.4 L’exécution de l’instruction thread.
La gestion de mémoire
La gestion de mémoire est étendue au multi-ensemble :
– Une pile sémantique terminée peut être désallouée.
– Une pile sémantique suspendue peut être récupérée si sa condition d’activation
dépend d’une variable non accessible. Dans ce cas, la pile sémantique ne redeviendrait jamais exécutable, on peut donc l’enlever en toute sécurité.
L’intuition simple du chapitre 2 que « les structures de contrôle sont désallouées et les
structures de données sont récupérées », n’est plus complètement vraie.
4.1.3 Un exemple d’exécution
Ce premier exemple montre comment les fils sont créés et comment ils communiquent
par synchronisation dataflow. Prenons l’instruction suivante :
local B in
thread B=true end
if B then {Browse yes} end
end
Nous utiliserons la machine abstraite basée sur les substitutions de la section 3.3.
– Nous omettons les pas d’exécution initiaux et nous allons directement au moment
où les instructions thread et if sont toutes les deux sur la pile sémantique.
Cela donne
( {[thread b=true end, if b then {Browse yes} end]},
{b} ∪ s )
où b est une variable en mémoire. Il y a une pile sémantique qui contient deux
instructions.
– Après l’exécution de l’instruction thread, nous obtenons
( {[b=true], [if b then {Browse yes} end]},
{b} ∪ s )
i
i
i
i
i
i
i
i
192
4
• La programmation concurrente dataflow
mémoire à affectation unique
(
ST 1
(thread
ST
...
ST
1
n
ST n
...
mémoire à affectation unique
Figure 4.4 L’exécution de l’instruction thread.
La gestion de mémoire
La gestion de mémoire est étendue au multi-ensemble :
– Une pile sémantique terminée peut être désallouée.
– Une pile sémantique suspendue peut être récupérée si sa condition d’activation
dépend d’une variable non accessible. Dans ce cas, la pile sémantique ne redeviendrait jamais exécutable, on peut donc l’enlever en toute sécurité.
L’intuition simple du chapitre 2 que « les structures de contrôle sont désallouées et les
structures de données sont récupérées », n’est plus complètement vraie.
4.1.3 Un exemple d’exécution
Ce premier exemple montre comment les fils sont créés et comment ils communiquent
par synchronisation dataflow. Prenons l’instruction suivante :
local B in
thread B=true end
if B then {Browse yes} end
end
Nous utiliserons la machine abstraite basée sur les substitutions de la section 3.3.
– Nous omettons les pas d’exécution initiaux et nous allons directement au moment
où les instructions thread et if sont toutes les deux sur la pile sémantique.
Cela donne
( {[thread b=true end, if b then {Browse yes} end]},
{b} ∪ s )
où b est une variable en mémoire. Il y a une pile sémantique qui contient deux
instructions.
– Après l’exécution de l’instruction thread, nous obtenons
( {[b=true], [if b then {Browse yes} end]},
{b} ∪ s )
