Professional Documents
Culture Documents
Ben-Ari
Principles of Concurrent and Distributed Programming
Second Edition
Addison-Wesley, 2006
Computer Time
0
100
200
300
400
500
time (nanoseconds)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 1.1
Human Time
0
100
200
300
400
500
time (seconds)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 1.2
I/O
Computation
6
start I/O
6
end I/O
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 1.3
p3, . . .
6
cpp
p1, r1, p2, q1
q2, . . .
6
cpq
I
@
@
@ r2, . . .
6
cpr
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.1
Possible Interleavings
p1q1p2q2,
p1q1q2p2,
p1p2q1q2,
q1p1q2p2,
q1p1p2q2,
q1q2p1p2.
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.2
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.3
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.4
'
$'
$'
p1: n k1
k1 = 1, k2 = 2
n=0
&
p2: n k2
k1 = 1, k2 = 2
n=1
%&
(end)
k1 = 1, k2 = 2
n=2
%&
s-
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.5
(end)
q1: n k2
k1 = 1, k2 = 2
&n = 1
'
?
(end)
(end)
k1 = 1, k2 = 2
&n = 2
@
%
@
@
R
'@
p1: n k1
(end)
k1 = 1, k2 = 2
&n = 2
'
?
(end)
(end)
k1 = 1, k2 = 2
&n = 1
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
%
$
%
Slide 2.6
Process p
Process q
k1
k2
p1: nk1
q1: nk2
(end)
q1: nk2
(end)
(end)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.7
Multitasking System
R Operating R
R
R
e
e Program 1 e Program 2 e
System
g
g
g
g
XXX
*
XXX
XXX
XXX
XX
z
R
e
g
Program 3
R
e
g
Program 4
CPU
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.8
Multiprocessor Computer
Global
Memory
CPU
CPU
CPU
Local
Memory
Local
Memory
Local
Memory
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.9
Global memory
0000 0000 0000 0011
*
YH
H
Local memory
Local memory
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.10
Node
Node
6@
6
I@@
@ @
@ @
@ @
R ?
?
@
Node
- Node
Node
Node
6
?
Node
- Node
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.11
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.12
Process p
Process q
Process p
Process q
p1: nn+1
q1: nn+1
p1: nn+1
q1: nn+1
(end)
q1: nn+1
p1: nn+1
(end)
(end)
(end)
(end)
(end)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.13
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.14
Process p
Process q
p.temp
q.temp
p1: tempn
q1: tempn
p2: ntemp+1
q1: tempn
(end)
q1: tempn
(end)
q2: ntemp+1
(end)
(end)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.15
Process p
Process q
p.temp
q.temp
p1: tempn
q1: tempn
p2: ntemp+1
q1: tempn
p2: ntemp+1
q2: ntemp+1
(end)
q2: ntemp+1
(end)
(end)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.16
q
q1:
flag true
q2:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.17
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.18
Register Machine
Memory
Memory
Load
Memory
6Store
?
0
Registers
Registers
Registers
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.19
Process p
Process q
p.R1
q.R1
(end)
(end)
(end)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.20
p1:
p2:
p3:
p4:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.21
Stack Machine
Memory
Memory
Memory
A Pop
K
A
Push A
AU
0
Stack
1
Stack
1
Stack
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.22
p1:
p2:
p3:
p4:
p5:
p
integer local1, local2
n some expression
computation not using n
local1 (n + 5) 7
local2 n + 5
n local1 * local2
q
integer local
q1: local n + 6
q2:
q3:
q4:
q5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.23
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.24
program count;
var n: integer := 0;
3
4
procedure p;
begin
for i := 1 to 10 do
begin
temp := n;
10
n := temp + 1
11
end
12
end;
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.25
procedure q;
17
18
begin
19
for i := 1 to 10 do
20
begin
21
temp := n;
22
n := temp + 1
23
end
24
end;
25
26
begin
27
cobegin p; q coend;
28
29
end.
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.26
Concurrent Program in C
1
int n = 0;
2
3
void p() {
int temp, i ;
temp = n;
n = temp + 1;
}
8
9
10
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.27
Concurrent Program in C
16
void q() {
17
int temp, i ;
18
19
temp = n;
20
n = temp + 1;
}
21
22
23
24
void main() {
25
26
27
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.28
procedure Count is
N: Integer := 0;
pragma Volatile(N);
5
6
8
9
10
Temp: Integer;
begin
for I in 1..10 loop
11
Temp := N;
12
N := Temp + 1;
13
14
end loop;
end Count_Task;
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.29
16
17
18
19
20
begin
declare
P, Q: Count_Task;
begin
null ;
21
end;
22
23
end Count;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.30
3
4
int temp;
temp = n;
n = temp + 1;
}
9
10
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.31
16
17
18
19
p. start ();
20
q. start ();
21
try {
22
p. join ();
23
q. join ();
24
25
catch (InterruptedException e) { }
26
27
28
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.32
#include "for.h"
#define TIMES 10
byte
n = 0;
4
5
proctype P() {
byte temp;
temp = n;
n = temp + 1
rof (i )
10
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.33
16
init {
atomic {
17
18
run P();
19
run P()
20
21
(_nr_pr == 1);
22
23
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.34
Frog Puzzle
M
M
M
M
F
F
F
F
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.35
M
M
M
M
F
F
F
F
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.36
F
F
F
F
M
M
M
M
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.37
M t MFF
t MMFF
?
MFM t F
HH
HH
j
MF t MF
MFMF t
HH
HH
j
?
MFFM t
MF t FM
t FMMF
?
F t MMF
MFF t M
t FMFM
?
F t MFM
?
FFM t M
?
FF t MM
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.38
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.39
integer i 0
found false
while not found
ii+1
found f(i) = 0
q
q1:
q2:
q3:
q4:
integer j 1
found false
while not found
jj1
found f(j) = 0
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.40
q
integer j 1
q1: while not found
q2:
jj1
q3:
found f(j) = 0
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.41
integer i 0
while not found
ii+1
if f(i) = 0
found true
q
q1:
q2:
q3:
q4:
integer j 1
while not found
jj1
if f(j) = 0
found true
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.42
integer i 0
while not found
await turn = 1
turn 2
ii+1
if f(i) = 0
found true
q
q1:
q2:
q3:
q4:
q5:
integer j 1
while not found
await turn = 2
turn 1
jj1
if f(j) = 0
found true
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.43
integer i 0
while not found
await turn = 1
turn 2
ii+1
if f(i) = 0
found true
turn 2
q
q1:
q2:
q3:
q4:
q5:
q6:
integer j 1
while not found
await turn = 2
turn 1
jj1
if f(j) = 0
found true
turn 1
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.44
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.45
while n < 2
p2:
write(n)
p1:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.46
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.47
q
q1: while flag = false
q2:
if n = 0
q3:
flag true
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.48
q
q1: while n = 0 // Do nothing
q2: flag true
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.49
loop
if condition-1
ii+1
else if condition-2
jj+1
else if condition-3
kk+1
else exit loop
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 2.50
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.1
Critical Section
fff
HH
H
f
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.2
loop forever
non-critical section
await turn = 1
critical section
turn 2
q
q1:
q2:
q3:
q4:
loop forever
non-critical section
await turn = 2
critical section
turn 1
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.3
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.4
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.5
- p1,q1,1
?
p2,q1,1
- p1,q2,1
?
- p2,q2,1
?
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.6
?
- p2,q1,1 H
p1,q2,1
H
H
?
j ?
H
p3,q1,1 H
p2,q2,1
H
H
?
j ?
H
p3,q2,1
p4,q1,1 H
HH
?
j ?
H
p1,q1,2 H
p4,q2,1
HH
?
j ?
H
p2,q1,2
p1,q2,2
?
?
p2,q2,2
p1,q3,2
?
?
p2,q3,2
p1,q4,2
?
p2,q4,2
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.7
- p1,q2,1
?
p1,q1,2
?
- p1,q2,2
? ?
p2,q1,1
?
?
- p2,q2,1
- p2,q1,2
?
p1,q3,2
?
p3,q1,1
?
? ?
- p3,q2,1
- p2,q2,2
?
p1,q4,2
?
p4,q1,1
?
? ?
- p4,q2,1
- p2,q3,2
?
- p2,q4,2
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.8
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.9
t
' ?
&
'
&
' ? ?
?
'
p2: turn2,
$
q1: await turn=2,
turn = 1
&
%
&
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
%
Slide 3.10
'
'
p1: NCS,
q1: NCS,
turn = 2
&
p1: NCS,
q2: await turn=2,
turn = 2
&
%
?
'
?
'
&
&
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.11
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.12
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.13
'
'
$
$
$
- p2: wantptrue,
p2: wantptrue,
p1: await !wantq,
- q2: wantqtrue,
q1: await !wantp,
q1: await !wantp,
false,false
false,false
false,false
&
%
&
%
&
%
6
r
'
'
?
$
'
p3: wantpfalse,
p3: wantpfalse,
q2: wantqtrue,
q3: wantqfalse,
true,true
true,false
&
%
&
%
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.14
Process p
Process q
wantp
wantq
false
false
p2: wantptrue
false
false
p2: wantptrue
q2: wantqtrue
false
false
p3: wantpfalse
q3: wantqtrue
true
false
p3: wantpfalse
q3: wantqfalse
true
true
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.15
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.16
Process p
Process q
wantp
wantq
false
false
p2: wantptrue
false
false
p2: wantptrue
q2: wantqtrue
false
false
q2: wantqtrue
true
false
true
true
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.17
'
$
'
$
$
- p3: await !wantq,
p2: wantptrue,
p3: await !wantq,
- q3: await !wantp,
q2: wantqtrue,
q2: wantqtrue,
false,false
true,true
true,false
&
%
&
%
&
%
6
r
'
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.18
p1:
p2:
p3:
p4:
p5:
p6:
p7:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.19
r
'?
$ '
$ '
$
p3: while wantq,
p3: while wantq,
p4: wantpfalse,
- q4: wantqfalse,
- q4: wantqfalse,
q3: while wantp,
true,true
true,true
true,true
&
% &
% &
%
6
'
$ '
$ '?
$
p5: wantptrue,
p5: wantptrue,
p4: wantpfalse,
q5: wantqtrue,
q3: while wantp,
q5: wantqtrue,
false,false
false,true
true,false
&
% &
% &
%
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.20
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
p10:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.21
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.22
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.23
p1:
p2:
p3:
p4:
p5:
p6:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.24
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.25
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
p10:
p11:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 3.26
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.1
2A
A
true
false
6
i
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.2
3A
A
true
false
6
i
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.3
Duality: 2A
A
true
false
6
i
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.4
Duality: 3A
A
true
false
6
i
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.5
32A
A
true
false
6
i
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.6
23A
A
true
false
6
i
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.7
AU B
A, B
true
false
6
i
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.8
32A1 32A2
s k2
A1,A2
true
s k1
?
false
6
i
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.9
23A1 23A2
A1,A2
true
false
6
i
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.10
p, q
cs
try
ncs
0
10
11
12
13
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.11
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
p10:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.12
do :: wantp = true;
do :: ! wantq > break;
:: else >
if :: (turn == 1)
:: (turn == 2) >
fi
9
10
od;
11
12
13
14
od
}
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.13
byte critical
= 0;
2
3
5
6
7
8
/ preprotocol /
critical ++;
10
11
PinCS = true;
12
critical ;
13
/ postprotocol /
od
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.14
never {
/ !(<>nostarve) /
accept_init :
T0_init:
if
fi ;
8
9
10
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.15
16
never {
17
T0_init:
/ !([]<>nostarve) /
18
if
19
20
21
fi ;
22
accept_S4:
23
if
24
25
fi ;
26
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 4.16
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.1
p1:
p2:
p3:
p4:
p5:
p6:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.2
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.3
p1:
p2:
p3:
p4:
p5:
p6:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.4
pi
p
-
pi@
@
(a)
pi
(b)
pi
(c)
p
-
(d)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.5
(e)
pi
pi
(f)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.6
pi
pi-
p
-
@
(a)
p
pi
(b)
pi
(c)
q
-
(d)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.7
pi
p
-
pi@
@
(a)
pi
(b)
pi
(c)
(d)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.8
pi@
@
(e)
q
-
pi-
@
@
(f)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.9
p1:
p2:
p3:
p4:
p5:
p6:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.10
p1:
p2:
p3:
p4:
p5:
p6:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.11
p1:
p2:
p3:
p4:
p5:
loop forever
non-critical section
loop
await gate = 0
gate i
delay
until gate = i
critical section
gate 0
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.12
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
loop forever
non-critical section
want[i] true
for all processes j < i
if want[j]
want[i] false
await not want[j]
goto p1
for all processes j > i
await not want[j]
critical section
want[i] false
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.13
p1:
p2:
p3:
p4:
p5:
p6:
p7:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 5.14
inactive
ready
- running
- completed
YH
H
HH
?
HH
H blocked
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.1
p1:
p2:
p3:
p4:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.2
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.3
'
$'
$'
p1: wait(S),
- p2: signal(S),
q1: wait(S),
q1: wait(S),
(0, )
(1, )
I
@
&
%
&
@@
@@
@@'
@@
R p1: wait(S),
@
p2: signal(S),
- q1: blocked,
(0, {q})
p&
I
@
%
%
@
@
@'
$
$
q@
p1: blocked,
- q2: signal(S),
q2: signal(S),
(0, {p})
(0, )
&
%&
%
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.4
p1:
p2:
p3:
p4:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.5
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.6
Process p
Process q
Process r
p1: wait(S)
q1: wait(S)
r1: wait(S)
(1, )
p2: signal(S)
q1: wait(S)
r1: wait(S)
(0, )
p2: signal(S)
q1: blocked
r1: wait(S)
(0, {q})
p1: signal(S)
q1: blocked
r1: blocked
p1: wait(S)
q1: blocked
r2: signal(S)
(0, {q})
p1: blocked
q1: blocked
r2: signal(S)
p2: signal(S)
q1: blocked
r1: wait(S)
(0, {q})
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.7
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.8
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.9
'
$'
$'
p1: append,
p2: signal(S),
p1: append,
- q1: wait(S),
- q1: wait(S),
q1: wait(S),
(0, ), [ ]
(1, ), [x]
(0, ), [x]
&
%&
%&
%
6
'?
$ '?
$ '?
p1: append,
p1: append,
p2: signal(S),
- q1: blocked,
q2: take,
q1: blocked,
(0, {con}), [ ]
(0, ), [x]
(0, {con}), [x]
&
%&
%&
%
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.10
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.11
p1:
p2:
p3:
p4:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.12
Process p
Process q
p1: wait(S)
q1: wait(S)
p2: signal(S)
q1: wait(S)
p2: signal(S)
q1: wait(S)
p1: wait(S)
q1: wait(S)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.13
p1:
p2:
p3:
p4:
loop forever
think
preprotocol
eat
postprotocol
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.14
.........................................................
.
.
.
.
.
.
.
.
.
.
.
..........
........
......................
.
.
........
.
.
.
.
.
.
.
.
.
.
.
.
.......
.
.
.
.
.
.
.
.
.
.
.
.
.....
.
.
.
.
.
.
.
.
.
.
.....
.
.
.
.
... phil4 ...
...
....
.
.
.
.
.
....
.
.
.
.
.
....
H
.
....
.. .
.
.
.
.
.
H
.
.
.
.
.
.
.
.
.
.
.
.............
fork4 H
j
fork3 .....
.....
............. .....
.
.
.
.
.
.
.
.
.
.... .............................
.
.... ..
...
...
.
... ...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.... ...
.
.
........
.
.
.
.
.
.
.
.
... ...
.
.
.
.
.....
.
....
.
.
.
phil3
. ....
..... ..... phil5 .....
.
...
.
.
.
.
.
.
...
...
...
...
.
..
..
..
.
.
.
.....
...
.
.
.
.
.
.
.
.
.
.
.
.
.....
.
.....................
....................
.
.
.
.
... Spaghetti ..
...
..
.
.
.
...
...
..
..
...
.
.
...
.
.
....
...
..
..
*
Y
H
.
.
.
.
.
.
.
.
.
...
.........
HH ..
........................
...
..
.
... fork5 .......................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...... fork2 ..
.....
...
......
..
....
.
.
.
.
..
...
...
.
.
.
.
.
.
.
.
...
..
..... phil2 ....
..... phil1 ....
.
....
.
6 ...
.
....
..
..
..
.
.
.
.
.... ......
.
.
.
.
.....
..... ......... ...........
.... ........
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
......
.....
.......
.
.
.
.
.
.........
......
.
.
fork1
.
...........
.
.
.
.
.
.................
.....
..........................................
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.15
p1:
p2:
p3:
p4:
p5:
p6:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.16
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.17
p1:
p2:
p3:
p4:
p5:
p6:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.18
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
p10:
p11:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.19
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
p10:
p11:
p12:
p13:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.20
numGate1
gate1
numGate2
m
m
m
m
m
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
gate2
CS
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.21
Process p
Process q
gate1
gate2
nGate1
nGate2
p4: wait(g1)
q4: wait(g1)
p9: wait(g2)
q9: wait(g2)
CS
q9: wait(g2)
p12: signal(g2)
q9: wait(g2)
p1: wait(g1)
CS
p1: wait(g1)
q13: signal(g1)
p1: blocked
q13: signal(g1)
p4: wait(g1)
q1: wait(g1)
p4: wait(g1)
q4: wait(g1)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.22
Semaphores in Java
1
5
6
int temp;
try {
s. acquire ();
10
11
12
catch (InterruptedException e) {}
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.23
Semaphores in Java
16
temp = n;
17
n = temp + 1;
18
s. release ();
}
19
20
21
22
/ As before /
23
24
25
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.24
Semaphores in Ada
1
entry Wait;
procedure Signal;
4
5
6
private
Count: Natural := Initial ;
end Semaphore;
7
8
9
10
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.25
Semaphores in Ada
16
17
18
begin
19
20
Count := Count 1;
end Wait;
21
22
procedure Signal is
23
begin
24
Count := Count + 1;
25
end Signal;
26
end Semaphore;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.26
inline wait( s ) {
atomic { s > 0 ; s }
4
5
6
7
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.27
/ Weak semaphore /
5
6
typedef Semaphore {
byte count;
bool blocked[NPROCS];
10
};
11
12
/ Initialize
13
inline initSem(S, n) {
14
15
semaphore to n /
S.count = n
}
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.28
/ Wait operation: /
17
18
inline wait(S) {
atomic {
19
20
if
21
22
23
fi
}
24
25
26
27
/ Signal operation : /
28
29
30
atomic {
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.29
31
if
32
33
34
35
36
fi
}
37
38
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.30
/ Weak semaphore /
4
5
typedef Semaphore {
byte count;
bool blocked[NPROCS];
byte i , choice ;
9
10
};
11
12
/ Initialize
13
inline initSem(S, n) {
14
15
semaphore to n /
S.count = n
}
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.31
/ Wait operation: /
17
18
inline wait(S) {
atomic {
19
20
if
21
22
23
fi
}
24
25
26
27
/ Signal operation : /
28
29
/ nondeterministically
30
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.32
33
S.i = 0;
34
S.choice = 255;
35
do
36
37
38
:: else >
39
if
40
41
42
43
fi ;
44
S.i ++
45
od;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.33
46
if
47
48
49
fi
}
50
51
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.34
#define NPROCS 3
#define K
byte gate = 1;
int count = K;
byte critical
= 0;
do ::
d_step {
10
count;
11
if
12
13
:: else
14
fi
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.35
critical ++;
16
assert (critical
17
18
critical ;
19
d_step {
<= 1);
20
count++;
21
if
22
23
:: else
24
fi
}
25
od
26
27
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.36
wait(S)
p2: write("p")
p3: signal(T)
p1:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.37
p
p1: write("p")
p2: signal(S1)
p3: signal(S2)
r3:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.38
p1:
p2:
p3:
p4:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.39
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
p10:
p11:
integer m
loop forever
non-critical section
wait(S)
count count 1
m count
signal(S)
if m 1 wait(delay)
critical section
wait(S)
count count + 1
if count 0 signal(delay)
signal(S)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.40
Circular Buffer
6
out
6
in
6
out
6
in
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.41
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.42
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.43
/ Weak semaphore /
3
4
typedef Semaphore {
byte count;
byte temp, i ;
10
};
11
12
/ Initialize
13
inline initSem(S, n) {
14
15
semaphore to n /
S.count = n
}
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.44
/ Wait operation: /
17
18
19
inline wait(S) {
20
21
if
22
23
24
fi
}
25
26
27
/ Signal operation : /
28
29
/ nondeterministically
30
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.45
32
33
S.i = len(S.ch);
34
if
35
36
:: else >
do
37
38
39
40
S.ch ? S.temp;
41
42
fi
43
44
45
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.46
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.47
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.48
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 6.49
q1:
q
CS.increment
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.1
fff
HH
H
monitor CS
f
n
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.2
q
loop forever
non-critical section
q1:
Sem.wait
critical section
q2:
Sem.signal
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.3
fff
HH
H
monitor Sem
f
s
notZero
fff
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.4
#
#
#
p1: Sem.wait,
p2: Sem.signal,
- p2: Sem.signal,
q1: Sem.wait,
q1: Sem.wait,
blocked,
0, < q >
1, <>
0, <>
"
"
!
"
!
!
6
6
#
# ?
9
p1: Sem.wait,
blocked,
- q2: Sem.signal
q2: Sem.signal,
0, < p >
0, <>
"
!
"
!
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.5
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.6
consumer
datatype D
loop forever
q1:
D PC.take
q2:
consume(D)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.7
fff
HH
H
condition 1
fff
waiting
monitor
AA
ff
f
signaling
condition 2
ff
AA
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.8
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.9
writer
q1: RW.StartWrite
q2: write to the database
q3: RW.EndWrite
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.10
Slide 7.11
loop forever
think
takeForks(i)
eat
releaseForks(i)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.12
phil1
phil2
phil3
take(1)
take(2)
release(1)
release(1)
f0
f1
f2
f3
f4
take(3)
take(2)
take(3)
take(2) and
release(3)
waitC(OK[2])
4
release(1)
(blocked)
release(3)
take(1)
(blocked)
release(3)
release(1)
(blocked)
release(3)
release(1)
(blocked)
take(3)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.13
monitor RW {
4
5
void StartRead() {
if (writing || ! empty(OKtoWrite))
waitc(OKtoRead);
7
8
readers = readers + 1;
signalc(OKtoRead);
10
11
void EndRead() {
12
readers = readers 1;
13
if (readers == 0)
signalc(OKtoWrite);
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.14
16
17
waitc(OKtoWrite);
18
writing = 1;
19
20
21
void EndWrite() {
22
23
writing = 0;
24
if (empty(OKtoRead))
signalc(OKtoWrite);
25
else
26
signalc(OKtoRead);
27
28
29
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.15
writer
loop forever
q1:
RW.StartWrite
q2:
write to the database
q3:
RW.EndWrite
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.16
Process reader
Process writer
waitC(OKtoRead)
operation EndWrite
(blocked)
writing false
(blocked)
signalC(OKtoRead)
readers readers + 1
signalC(OKtoRead)
...
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.17
Process reader
Process writer
operation EndWrite
(blocked)
writing false
(blocked)
(blocked)
readers readers + 1
...
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.18
protected RW is
4
5
6
private
N: Integer := 0;
end RW;
7
8
9
10
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.19
16
protected body RW is
17
18
begin
19
N := I;
20
end Write;
21
22
begin
23
24
25
return N;
end Read;
end RW;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.20
protected RW is
entry StartRead;
procedure EndRead;
entry Startwrite ;
procedure EndWrite;
private
end RW;
10
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.21
protected body RW is
17
entry StartRead
18
19
20
21
22
23
procedure EndRead is
24
begin
25
26
Readers := Readers 1;
end EndRead;
27
28
29
30
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.22
31
32
33
34
35
entry StartWrite
when not Writing and Readers = 0 is
begin
Writing := true;
end StartWrite;
36
37
procedure EndWrite is
38
begin
39
40
41
Writing := false ;
end EndWrite;
end RW;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.23
Producer-Consumer in Java
1
class PCMonitor {
final int N = 5;
try {
wait();
} catch (InterruptedException e) {}
10
11
Buffer [ Newest] = V;
12
Newest = (Newest + 1) % N;
13
Count = Count + 1;
14
notifyAll ();
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.24
Producer-Consumer in Java
synchronized int Take() {
16
17
int temp;
18
while (Count == 0)
try {
19
wait();
20
} catch (InterruptedException e) {}
21
22
temp = Buffer[Oldest];
23
Oldest = (Oldest + 1) % N;
24
Count = Count 1;
25
notifyAll ();
26
return temp;
}
27
28
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.25
fff
I
HH @
H @
f
object
@
@
ff
f
waiting
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.26
class RWMonitor {
try {
wait();
} catch (InterruptedException e) {}
readers = readers + 1;
notifyAll ();
10
11
12
13
readers = readers 1;
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.27
16
17
try {
18
wait();
19
} catch (InterruptedException e) {}
20
writing = true;
21
22
23
24
writing = false;
25
notifyAll ();
}
26
27
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.28
4
5
typedef Condition {
bool gate;
byte waiting ;
9
10
inline enterMon() {
11
atomic {
12
! lock;
13
lock = true;
}
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.29
inline leaveMon() {
18
lock = false;
19
20
21
inline waitC(C) {
atomic {
22
23
C.waiting ++;
24
lock = false;
/ Exit monitor /
25
C.gate;
26
lock = true;
/ IRR /
27
C.gate = false;
/ Reset gate /
28
C.waiting ;
}
29
30
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.30
33
if
34
35
36
37
C.gate = true;
38
! lock ;
39
40
:: else
41
fi ;
}
42
43
44
45
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.31
protected RW is
2
3
entry Start_Read;
procedure End_Read;
entry Start_Write;
procedure End_Write;
7
8
9
private
Waiting_To_Read : integer := 0;
10
Readers : Natural := 0;
11
12
13
end RW;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.32
protected RW is
2
3
entry StartRead;
procedure EndRead;
entry Startwrite ;
procedure EndWrite;
8
9
private
10
entry ReadGate;
11
entry WriteGate;
12
13
14
15
end RW;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 7.33
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.1
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.2
Conways Problem
inC compress
pipe
-
output
outC -
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.3
4,2,6
Result
Source
Source
Source
2
0
1
?
2
1
0
?
0
0
1
?
3,2,4
2
0
1
?
10,5,18
Result
3,0,0
2
1
0
?
6,5,10
2
0
1
?
16,8,30
Result
0,0,0
Zero
0,0,0
Zero
0,0,0
Zero
0
0
1
?
6,0,0
2
1
0
?
9,8,16
6
0
0
1
?
9,0,0
2
0
1
?
2
1
0
?
0
0
1
?
Sink
Sink
Sink
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.4
30
Result
16
0
0
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Zero
Slide 8.5
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.6
p1:
p2:
p3:
p4:
p5:
p6:
p7:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.7
p1:
p2:
p3:
p4:
p5:
p6:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.8
#define N 9
#define K 4
4
5
inC ? previous ;
do
:: inC ? c >
10
if
11
12
:: else >
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.9
if
17
18
pipe ! count+1;
19
count = 0
20
:: else
21
fi ;
22
pipe ! previous ;
23
previous = c;
fi
24
od
25
26
27
28
29
30
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.10
32
byte c, count = 0;
33
do
34
:: pipe ? c;
35
outC ! c;
36
count++;
37
if
38
39
outC ! \n;
40
count = 0
41
:: else
42
fi
od
43
44
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.11
2
3
byte Sum, X;
6
7
fi ;
South ! X;
10
rof (i )
11
12
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.12
server
integer p, r
loop forever
q1:
q2:
q3:
accept service(p, r)
r do the service(p)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.13
t1
t2
t3
calling
6
parameters
accepting
results
time
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.14
B: Buffer_Array;
4
5
6
7
begin
loop
select
when Count < IndexLast =>
B(In_Ptr) := I;
10
end Append;
11
12
13
or
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.15
16
17
I := B(Out_Ptr);
18
end Take;
19
20
21
22
23
24
25
or
terminate;
end select;
end loop;
end Buffer;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.16
Remote
interface
Client program
Server program
Remote
interface
6
?
Sending stub
Receiving stub
6
?
Communications
- Communications
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.17
Pipeline Sort
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.18
Hoares Game
@
@
@
y
@
@
@
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 8.19
A Space
(a,10,20)
(a,30)
(a,false,40)
(a,true,50)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.1
p1:
p2:
p3:
p4:
loop forever
non-critical section
removenote(s)
critical section
postnote(s)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.2
server
integer client
serviceType s
dataType r, p
q1: removenote(S, client, s, p)
q2: r do (s, p)
q3: postnote(R, client, r)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.3
q1:
q2:
q3:
q4:
server
integer client
serviceType s
dataType r, p
s // Service provided
removenote(S, client, s=, p)
r do (s, p)
postnote(R, client, r)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.4
consumer
integer count 0
integer v
loop forever
q1:
removenote(B, count=, v)
q2:
consume(v)
q3:
count count + 1
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.5
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.6
p1:
p2:
p3:
p4:
p5:
p6:
p7:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.7
p1:
p2:
p3:
p4:
p5:
p6:
p7:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.8
public String id ;
public Object[] p;
4
5
this . id = id;
10
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.9
16
17
18
19
20
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.10
2
3
while (true) {
Note t = space.removenote(task);
int ip = 0;
for (int i = 1; i <= SIZE; i++)
10
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.11
2
3
do
:: space ?? t ,
row, col , _, _;
10
od;
11
12
r , row, col , ip , 0;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.12
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 9.13
node 5
integer k 20
send(request, 3, k, 30)
node 3
integer m, n
receive(request, m, n)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.1
node 5
send(request, 3, myID)
node 3
integer source
receive(request, source)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.2
p10:
p11:
p12:
p13:
main
non-critical section
myNum chooseNumber
for all other nodes N
send(request, N, myID, myNum)
await replys from all other nodes
critical section
for all nodes N in deferred
remove N from deferred
send(reply, N, myID)
receive
integer source, reqNum
receive(request, source, reqNum)
if reqNum < myNum
send(reply,source,myID)
else add source to deferred
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.3
RA Algorithm (1)
10
Aaron
req
req
Becky
req
req
@@ @
I
req
@req
@
@
R
@ @
Chloe
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.4
RA Algorithm (2)
Aaron
10
Chloe
@
I
@ reply
@
@
reply
Becky
reply
Chloe
15
Aaron, Chloe
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.5
Becky
Aaron
Chloe
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.6
RA Algorithm (3)
Aaron
10
Chloe
reply
Becky
reply
-
Chloe
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.7
RA Algorithm (4)
Aaron
10
@ reply
@
R
@
Becky
Chloe
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.8
Becky
req
req
Becky
Aaron
Aaron
Aaron
Becky
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.9
Becky
req
req
Becky
Aaron
10
Aaron
10
Aaron
10
reply
Aaron
Becky
5
reply
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.10
Becky
8
req
Becky
Aaron
10
Aaron
10
reply
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.11
Quiescent Nodes
Becky
5
req
Becky
Aaron
Aaron
Becky
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.12
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
p10:
p11:
Main
loop forever
non-critical section
requestCS true
myNum highestNum + 1
for all other nodes N
send(request, N, myID, myNum)
await replys from all other nodes
critical section
requestCS false
for all nodes N in deferred
remove N from deferred
send(reply, N, myID)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.13
p1:
p2:
p3:
p4:
p5:
Receive
integer source, requestedNum
loop forever
receive(request, source, requestedNum)
highestNum max(highestNum, requestedNum)
if not requestCS or requestedNum myNum
send(reply, source, myID)
else add source to deferred
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.14
choose
- send
request
- receive
request
- reply
- choose
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.15
i main
choose
- send
request
i receive
j main
j receive
choose
- receive
request
- reply
- receive
request
- reply
- send
request
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.16
node i H
HH ch[id]
H
- node id
node j
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.17
requestCS[myID] = true ;
myNum[myID] = highestNum[myID] + 1 ;
7
8
9
10
11
12
:: else
13
fi
14
rof (J);
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.18
for (K,0,NPROCS2)
17
ch[myID] ?? reply , _ , _;
18
19
rof (K);
20
critical_section ();
21
requestCS[myID] = false;
22
23
byte N;
24
do
25
26
27
od
28
29
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.19
do ::
highestNum[myID] =
7
8
atomic {
if
10
:: requestCS[myID] &&
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.20
:: else >
16
ch[source] ! reply , 0, 0
17
fi
18
19
od
20
21
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.21
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.22
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
p10:
p11:
p12:
Main
loop forever
non-critical section
if not haveToken
myNum myNum + 1
for all other nodes N
send(request, N, myID, myNum)
receive(token, granted)
haveToken true
inCS true
critical section
granted[myID] myNum
inCS false
sendToken
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.23
p13:
p14:
p15:
p16:
Receive
integer source, reqNum
loop forever
receive(request, source, reqNum)
requested[source] max(requested[source], reqNum)
if haveToken and not inCS
sendToken
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.24
requested
granted
Aaron
Becky
Chloe
Danielle
Evan
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.25
- Danielle
6
I@
@
@
@
R@
@
?
Aaron
Chloe
?
Evan
6
I
@@
@
@
@
?
R
@
- Becky
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.26
Danielle
Evan
@
R
@
Chloe
Aaron
@
I
@
-
Becky
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.27
Becky
Aaron
Chloe
Danielle
Evan
Aaron
Becky
Chloe
Danielle
Evan
?
Aaron
Becky
Chloe
Danielle
Evan
?
Aaron
Becky
Chloe
- Danielle
Evan
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.28
?
Aaron
- Becky
Chloe
- Danielle
Evan
6
Aaron
- Becky
Chloe
- Danielle
Evan
6
Aaron
- Becky
Chloe
- Danielle
Evan
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.29
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
p9:
p10:
p11:
Main
loop forever
non-critical section
if not holding
send(request, parent, myID, myID)
parent 0
receive(token)
holding false
critical section
if deferred 6= 0
send(token, deferred)
deferred 0
else holding true
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.30
p12:
p13:
p14:
p15:
p16:
p17:
p18:
p19:
Receive
integer source, originator
loop forever
receive(request, source, originator)
if parent = 0
if holding
send(token, originator)
holding false
else deferred originator
else send(request, parent, myID, originator)
parent source
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 10.31
node2
node1
HH
*
HH
H
j
H
?
node3
HH
HH
j
H
node4
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.1
Back Edges
*
node1
YH
H
HH
H H
HH
HH
j
HH
H
node2
6
Y
H
HHH
HHH
6
HH
HH
H
j
H
node4
*
?
?
node3
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.2
Slide 11.3
p1:
p2:
p3:
p4:
p5:
p6:
p7:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.4
node2
*
e2
node1
HH
HHe3
H
j
H
?
node3
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.5
Spanning Tree
node2
node1
*
HH
HH
H
j
H
node4
?
node3
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.6
p1:
p2:
p3:
p4:
p5:
p6:
p7:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.7
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.8
Action
node1
node2
node3
node4
12
(-1,[ ],0)
(-1,[0,0],0)
(-1,[0,0,0],0)
(-1,[0],0)
24
(-1,[ ],1)
(1,[1,0],0)
(-1,[0,0,0],0)
(-1,[0],0)
23
(-1,[ ],1)
(1,[1,0],1)
(-1,[0,0,0],0)
(2,[1],0)
24
(-1,[ ],1)
(1,[1,0],2)
(2,[0,1,0],0)
(2,[1],0)
13
(-1,[ ],1)
(1,[1,0],3)
(2,[0,1,0],0)
(2,[2],0)
32
(-1,[ ],2)
(1,[1,0],3)
(2,[1,1,0],0)
(2,[2],0)
43
(-1,[ ],2)
(1,[1,1],3)
(2,[1,1,0],1)
(2,[2],0)
(-1,[ ],2)
(1,[1,1],3)
(2,[1,1,1],1)
(2,[2],1)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.9
node2 (3) H
1
*
HH
6
HH 2
1
j
H
node1 (2)
node4 (1)
HH
1
HH
?
H
j node3 (1)
H
1
1
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.10
p1:
p2:
p3:
p4:
p5:
p6:
p7:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.11
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.12
Messages on a Channel
node1
node2
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.13
Sending a Marker
node1
node2
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.14
p1:
p2:
p3:
p4:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.16
node2
M,3,2,1
node1
M,3,2,1
@ M,3,2,1
@
R
@
- node3
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.17
Action
node1
ls
lr
st
[3,3]
node2
rc
mk
ls
lr
[3]
[3]
1M2
[3,3]
[3,3]
[3]
[3]
1M3
[3,3]
[3,3]
[3]
[3]
21M
[3,3]
[3,3]
[3]
[3]
2M3
[3,3]
[3,3]
[3]
[3]
st
rc
mk
[3]
[3]
[3]
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.18
Action
node3
ls
lr
st
rc
mk
32
32
[0,1]
32
[0,2]
32M
[0,3]
31
[0,3]
[0,3]
[0,3]
31
[1,3]
[0,3]
[0,3]
31
[2,3]
[0,3]
[0,3]
31M
[3,3]
[0,3]
[0,3]
[3,3]
[0,3]
[3,3]
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 11.19
Temperature
Q
JQ
J Q
s
J
Q
J
3
Pressure
J
^
J
CPU
HH
CPU
HH
j
- Comparator
*
CPU
Throttle
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.1
p1:
p2:
p3:
p4:
p5:
p6:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.2
Basil A
I
@
Zoe A
A
@ @
A@ @ R
@ @
R @
@
R
- Leo R
A
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.3
Leo
general
Zoe
plan
general
plans
Basil
Basil
Leo
Leo
Zoe
Zoe
majority
majority
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.4
Slide 12.5
Leo
general
plan
reported by
Basil
Basil
Leo
Zoe
majority
majority
Zoe
A
R
A
A
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.6
Zoe
general
plan
reported by
Basil
Basil
Leo
Zoe
majority
Leo
A
majority
A
R
A
A
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.7
Leo
general
plan
reported by
Basil
Basil
Leo
Zoe
majority
majority
Zoe
A
A
R
A
A
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.8
Zoe
general
plan
reported by
Basil
Basil
Leo
Zoe
majority
Leo
A
majority
A
R
A
A
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.9
Basil A
HH
HH
Zoe A
Leo A
Leo A
Zoe A
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.10
Basil X
HH
H
H
Leo X
Zoe X
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.11
Leo X
Zoe X
HH
HH
Basil X
Basil X
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.12
Basil
I
@
R
Zoe A
A
@ @
A@ @ R
@ @
R @
@
R
- Leo R
A
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.13
Leo
general
Zoe
plans
general
plans
Basil
Basil
Leo
Leo
Zoe
Zoe
majority
majority
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.14
Leo
general
plans
reported by
Basil
Basil
Leo
Zoe
majority
majority
Zoe
A
A
R
R
R
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.15
Zoe
general
plans
reported by
Basil
Basil
Leo
Zoe
majority
Leo
A
majority
A
R
A
A
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.16
Zoe A
HH
HH
Leo A
Basil A
Basil A
Leo R
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.17
Basil
general
plan
reported by
John
Basil
John
Leo
Zoe
majority
Leo
majority
Zoe
A
R
?
?
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.18
Basil
general
plans
reported by
John
Basil
John
Leo
Zoe
Leo
majority
Zoe
A
R
R
R
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.19
Leo X
Basil X
John X
HH
HH
HH
HH
John X
A
A
Zoe X
Basil X
Zoe X
A
A
Zoe X
Basil Y
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
A
A
John Z
Slide 12.20
Zoe
Basil X
John X
HH
HH
HH
HH
John Y
A
A
Leo X
Basil Y
Leo Z
A
A
Leo Y
Basil Z
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
A
A
John Z
Slide 12.21
traitors
generals
messages
36
392
10
1790
13
5408
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.22
p1:
p2:
p3:
p4:
p5:
p6:
p7:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.23
Leo X
?
Zoe X
Basil X
Zoe X
Zoe X
Zoe X
John X
@
@
R
@
John X
@
@
R
@
Zoe X
Basil X
Zoe X
Zoe X
Zoe X
Zoe X
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.24
Leo X
?
Basil X
@
Zoe X
@
R
@
John X
Zoe X
Zoe X
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.25
Leo X
?
Basil X
@
@
R
@
John X
?
Zoe X
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.26
do two times
for all other generals G
// First and third rounds
send(G, myID, plan[myID])
for all other generals G
receive(G, plan[G])
myMajority majority(plan)
votesMajority number of votes for myMajority
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.27
if my turn to be king
// Second and fourth rounds
for all other generals G
send(G, myID, myMajority)
plan[myID] myMajority
else
receive(kingID, kingPlan)
if votesMajority > 3
plan[myID] myMajority
else
plan[myID] kingPlan
finalPlan plan[myID]
// Final decision
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.28
Scenario for King Algorithm - First King Loyal General Zoe (1)
Basil
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
John
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
Leo
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
Zoe
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.29
Scenario for King Algorithm - First King Loyal General Zoe (2)
Basil
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
R
John
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
R
Leo
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
R
Zoe
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
R
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.30
Scenario for King Algorithm - First King Loyal General Zoe (3)
Basil
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
45
kingPlan
John
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
45
kingPlan
Leo
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
45
kingPlan
Zoe
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
45
kingPlan
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.31
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
R
John
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
A
Leo
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
A
Zoe
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
R
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
R
Slide 12.32
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
John
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
Leo
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
Zoe
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.33
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
A
John
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
A
Leo
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
A
Zoe
Basil
John
Leo
Mike
Zoe
myMajority
votesMajority
kingPlan
A
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.34
traitors
generals
messages
traitors
generals
messages
36
48
392
240
10
1790
13
672
13
5408
17
1440
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.35
Zoe X
Leo Y
@
@
@
@
@
Leo
x1 , . . . , xn
John
Leo
u1 , . . . , um
@
Zoe
y1 , . . . , yn
John
Zoe
v1 , . . . , vm
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.36
John
@
@
Leo
x1 , . . . , xn
@
Zoe
y1 , . . . , yn
Zoe
x1 , . . . , xn
Leo
y1 , . . . , yn
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.37
Zoe
general
plan
reported by
Basil
Basil
John
Leo
Zoe
majority
John
Leo
?
A
?
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 12.38
r
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.1
Periodic Task
r
-
r
-
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.2
r
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.3
Sensors
INS
Main
Computer
Actuators
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.4
225 240
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
1000
Slide 13.5
Synchronous System
Sample
Compute
Control
T1
T2
T1
T2
Telemetry
Self-test
0
10
11
12
13
14
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
15
Slide 13.6
Sample
Compute
Control
Telemetry 1
Self-test
Sample
Compute
Control
Telemetry 2
Telemetry 1
10
11
12
13
14
Sample
Compute
Control
Telemetry 2
Self-test
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.7
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.8
Algorithm 13.2:
queue
sample
dataType d
p1: d sample
p2: append(d, buffer1)
p3:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.9
Asynchronous System
Data management
Communications
Telemetry
0
10
11
12
13
14
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
15
Slide 13.10
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.11
loop forever
await a scheduling event
if currentTask.priority < highest priority of a task on readyQueue
save partial computation of currentTask and place on readyQueue
currentTask take task of highest priority from readyQueue
invoke currentTask
else if currentTasks timeslice is past and
currentTask.priority = priority of some task on readyQueue
save partial computation of currentTask and place on readyQueue
currentTask take a task of the same priority from readyQueue
invoke currentTask
else resume currentTask
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.12
Preemptive Scheduling
Watchdog
Data management
Communications
Telemetry
0
10
11
12
13
14
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
15
Slide 13.13
p1:
p2:
p3:
p4:
p5:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.14
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.16
Watchdog
Counter increments
Main task
0
10
11
12
13
14
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
15
Slide 13.17
CS
Data management
CS
Telemetry
10
11
12
13
14
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
15
Slide 13.18
CS
Data management
Communications
CS
Telemetry
10
11
12
13
14
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
15
Slide 13.19
Priority Inheritance
CS
Data management
Telemetry
Communications
CS
Telemetry
10
11
12
13
14
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
15
Slide 13.20
4
5
do
::
data = nonCS;
enterCS(data);
exitCS(data);
data = idle ;
10
od
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.21
17
do
18
::
comm = long;
comm = idle;
19
od
20
21
22
23
24
do
25
::
telem = nonCS;
26
enterCS(telem);
27
exitCS(telem);
28
telem = idle ;
od
29
30
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.22
bit sem = 1;
2
3
inline enterCS(state ) {
atomic {
if
:: sem == 0 >
state = blocked;
sem != 0;
:: else >
9
10
fi ;
11
sem = 0;
12
state = CS;
}
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.23
16
inline exitCS(state ) {
atomic {
17
18
sem = 1;
19
state = idle
}
20
21
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.24
do
::
data = nonCS;
enterCS(data); exitCS(data);
data = idle ;
od
8
9
10
11
12
13
14
15
}
active proctype Comm()
provided (!ready(data) && !inherit (telem))
{ ... }
active proctype Telem()
provided (! ready(data) && !ready(comm) || inherit (telem))
{ ... }
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.25
lastWrittenPair
lastReadPair
@
@
R
@
1
I
@
@
@
@
0
@
@
currentSlot
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.26
p1:
p2:
p3:
p4:
p5:
p6:
writer
bit writePair, writeSlot
dataType item
loop forever
item produce
writePair 1 lastReadPair
writeSlot 1 currentSlot[writePair]
data[writePair, writeSlot] item
currentSlot[writePair] writeSlot
lastWrittenPair writePair
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.27
p7:
p8:
p9:
p10:
p11:
reader
bit readPair, readSlot
dataType item
loop forever
readPair lastWrittenPair
lastReadPair readPair
readSlot currentSlot[readPair]
item data[readPair, readSlot]
consume(item)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.28
q
q1: do something to cause event
q2: signal(s)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.29
package Ada.Synchronous_Task_Control is
6
7
8
9
return Boolean;
procedure Suspend_Until_True(
S : in out Suspension_Object);
private
10
11
end Ada.Synchronous_Task_Control;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.30
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.31
Transition in UPPAAL
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.32
P1
P2
0
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.33
P2
P1
0
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.34
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide 13.35
v(A1 )
v(A2 )
A1
A1
A1 A2
A1 A2
otherwise
A1 A2
A1 A2
otherwise
A1 A2
A1 A2
otherwise
A1 A2
v(A1 ) = v(A2 )
A1 A2
v(A1 ) 6= v(A2 )
v(A)
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide B.1
p3
p5
flag = 1
flag = 0
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide B.2
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide B.3
# main_program;
is
N: Integer ;
8
9
10
11
12
13
14
15
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide B.4
begin
17
Q := 0; R := 0; N := X1;
18
while N /= 0
19
20
loop
21
22
23
24
if R+1 = X2 then
Q := Q + 1; R := 0;
else
R := R + 1;
25
end if ;
26
N := N 1;
27
28
end loop;
end Divide;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide B.5
Integer Division
1
2
3
Q := 0; R := 0; N := X1;
while N /= 0
loop
if R+1 = X2 then Q := Q + 1; R := 0;
10
else R := R + 1;
11
end if ;
12
N := N 1;
13
end loop;
14
15
end Divide;
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide B.6
Slide B.7
producer
consumer
Buffer
notEmpty
append(d, Buffer)
wait(notEmpty)
[]
signal(notEmpty)
wait(notEmpty)
[1]
append(d, Buffer)
wait(notEmpty)
[1]
append(d, Buffer)
d take(Buffer)
[1]
append(d, Buffer)
wait(notEmpty)
[]
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide C.1
Synchronizing Precedence
node2
node1
HH
*
HH
H
j
H
HH
?
node3
HH
j
H
node4
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide C.2
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide C.3
Man
List of women
Woman
List of men
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide C.4
p1:
p2:
p3:
p4:
p5:
p6:
p7:
p8:
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide C.5
Q
Q
2
Q
4
Q
7
Q
8
1
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide C.6
Pascal
source
Pascal
compiler
Editor
@
R
@
C
source
C
compiler
@
R
@
P-code
- Interpreter
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide D.1
Promela
source
6
LTL
translator
Editor
Parser/
Generator
Trail
6
?
Verifier
C source
Computer
@
@
6
R
@
LTL
formula
?
C
Compiler
Verifier
Executable
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide D.2
'
criticalp = 0
criticalq = 0
&
'
- criticalp = 0
criticalq = 1
% &
'
criticalp = 0
criticalq = 0
&
%
'
criticalp = 0
criticalq = 1
&
'
- criticalp = 0
criticalq = 0
% &
?
?
'
criticalp = 0
criticalq = 0
&
$
%
c M. Ben-Ari 2006
M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition
Slide D.3