Principles of Concurrent and Distributed Programming (Second Edition) - Errata
- P. 41, exercise 6(b), "if C ... were replaced by D" should
be "if D ... were replaced by C".
- p. 75, line -1. "A U B is true is a state" should be "A U B is true
in a state".
- p. 76, line -11. "A circle B is true is a state" should be "A circle
B is true in a state".
- p. 82, line 3: "out of its critical section" should be "out of its
non-critical section". (Thanks to Dan Tecu.)
- p. 90, line -12: "terminate in its critical section" should be
"terminate in its non-critical section". (Thanks to Dan Tecu.)
- p. 90. p6 in formula (4.5) should be p4..6,
and similarly q6 in formula (4.6) should be q4..6.
- p. 91, exercise 9: "if A is true sj" should be "if A is true in
state sj". (Thanks to Bob Hilderman.)
- p. 92. The modification described in exercise 14
was later applied to the text,
so the exercise is no longer relevant.
- p. 130. Following line p5 of Udding's algorithm,
add the statement numGate1 \leftarrow numGate1 - 1.
- p. 139, ex. 8. #Buffer should be #buffer.
- p. 140, ex. 9. A circular buffer can be synchronized by making its
length one larger than the number of elements it is to store. In that
case, in=out indicates an empty buffer, while a full buffer is
indicated by in being one less than out modulo the size
of the buffer. When the semaphores are used, this convention is not necessary.
The algorithm itself will work, but the declaration should be changed
to datatype array[0..N-1] buffer so that the modulo N will
work. (Thanks to Jan Lönnberg.)
- p. 149, line 3: cond should be nonZero.
(Thanks to Bob Hilderman.)
- p. 159, line -2. "If a reader is starved is must" should be "If a
reader is starved it must".
- p. 160, line -2. The invariant should be eating[i] -> (forks[i]=2).
Clearly, forks[i]=2 is true initially, but eating[i] is false.
- p. 242, Theorem 11.2: "the source node eventually announces
termination" should be "the environment node eventually announces
termination". (Thanks to Bob Hilderman.)
- p. 247, lines 9-13: Clarification: these lines replace lines p8
through p11 of the algorithm on p. 244 and not the entire algorithm for
send signal. The modification suggested at the bottom of the
page makes it possible for the system to terminate without doing
anything. If this scenario should not be allowed, the definition of
isTerminated should be changed. (Thanks to Chris Middlemiss.)
- p. 334, line p3 in the algorithm. "wait for all process" should be
"wait for all processes".
The following issues relate to the "Answers to Exercises"
that is available to instructors through the Pearson website.
Last update 31 October 2010.