Na figura 1.1 temos um exemplo de um programa para calcular o mínimo múltiplo comum de dois números a e b. Este programa é puramente sequencial. Outro programa sequencial, que serve para calcular o factorial de um número x, é apresentado na figura 1.2.
in a, b : int where (a > 0 /\ b > 0)
local y1, y2: int where y1 = a, y2 = b
out g : int
l0: [
l1: while (y1 != y2) do
l2: [
l3: when (y1 > y2) do
l4: y1 := y1 - y2
or
l5: when (y2 > y1) do
l6: y2 := y2 - y1
];
l7: g := y1
];
l8:
|
in x: int where x >= 0
local y: int where y=0
out z: int where z=1
l0: while (~(x=y)) do
l1: (y,z) := (y+1, (y+1)*z );
l2:
|
Um exemplo muito simples de um programa concorrente é apresentado na
figura 1.3. Este programa incrementa o valor de x em
duas unidades.
local x : int where x=0
P1 :: [l0: x := x+1;
l1:
]
||
P2 :: [m0: x := x+1;
m1:
]
|