This page contains a list of all known errors in the book,
listed in reverse chronological order of discovery.
Depending on when you obtained your copy, you may see all, some, or
none of these bugs.
If you want to correct your copy, work down the list until one of the
bugs is missing; at that point you’ve fixed them all.
To report additional bugs, send mail to
.
-
p. 133, Figure 8.9(e): the node labeled 16 should be repositioned between
the first two dummy nodes, as follows:
-
p. 6, third line of second displayed code block: remove the
“not” sign (¬) in front of
“TAS”.
-
Multiple pages: Acquire fences should be changed from
“fence(||RW)” to “
fence(R||RW)” on
- p. 50, last line of
lock.acquire
in Figure 4.1
- p. 51, last line of
lock.acquire
in Figure 4.2
- p. 53, last line of
lock.acquire
in Figure 4.3
- p. 54, last line of
lock.acquire
in Figure 4.4
- p. 54, last line of
lock.acquire
in Figure 4.5
- p. 55, last line of
lock.acquire
in Figure 4.6
- p. 55, last line of
lock.acquire
in Figure 4.7
- p. 57, last line of
lock.acquire
in Figure 4.8
- p. 60, last line of
lock.acquire
in Figure 4.10
- p. 62, last line of
lock.acquire
in Figure 4.12
- p. 64, last line of
lock.acquire
in Figure 4.14
- p. 71, last line of first displayed code block
- p. 74, last line of Figure 5.1
- p. 75, last line of
barrier.cycle in
Figure 5.2
- p. 77, last line of
barrier.cycle in
Figure 5.4
- p. 78, last line of
barrier.cycle in
Figure 5.5
- p. 81, last line of Figure 5.7
- p. 88, last line of
rw_lock.writer_acquire
in Figure 6.1
- p. 90, last line of
rw_lock.writer_acquire
in Figure 6.2
- p. 91, last line of
rw_lock.writer_acquire
in Figure 6.3
- p. 92, last line of
rw_lock.writer_acquire
in Figure 6.4
- p. 95, last line of
seqlock.writer_acquire
in Figure 6.6
- p. 163, last line of
lock.acquire
in Figure 9.1
-
Multiple pages: Release fences should be changed from
“fence(RW||)” to
“fence(RW||W)” on
- p. 75, first line of
barrier.cycle in
Figure 5.2
- p. 77, first line of
barrier.cycle in
Figure 5.4
- p. 78, first line of
barrier.cycle in
Figure 5.5
- p. 90, first line of
rw_lock.writer_release
in Figure 6.2
- p. 91, first line of
rw_lock.writer_release
in Figure 6.3
- p. 92, first line of
rw_lock.writer_release
in Figure 6.4
-
p. 88, Figure 6.1, last line of
rw_lock.reader_acquire: replace
“fence(||R)” with
“fence(R||R)”.
-
p. 90, Figure 6.2, last line of
rw_lock.reader_acquire: replace
“fence(||R)” with
“fence(R||R)”.
-
p. 90, Figure 6.2, first line of
rw_lock.reader_release: replace
“fence(R||)” with
“fence(R||W)”.
-
p. 91, Figure 6.3, last line of
rw_lock.reader_acquire: replace
“fence(||R)” with
“fence(R||R)”.
-
p. 91, Figure 6.3, first line of
rw_lock.reader_release: replace
“fence(R||)” with
“fence(R||W)”.
-
p. 93, Figure 6.5, first line of
rw_lock.reader_release: replace
“fence(R||)” with
“fence(R||W)”.
-
p. 95, Figure 6.6, fifth line of
seqlock.reader_start: replace
“fence(||R)” with
“fence(R||R)”.
-
p. 95, Figure 6.6, second line of
seqlock.become_writer: replace
“fence(||W)” with
“fence(R||W)”.
-
p. 126, Figure 8.4, first line of
queue.enqueue: replace
“fence(W||)” with
“fence(W||W)”.
-
p. 126, Figure 8.4, third-to-last line of
queue.dequeue: replace
“fence(||W)” with
“fence(W||W)”.
-
p. 130, eighth-to-last line of Figure 8.6: replace
“fence(||W)” with
“fence(W||W)”.
-
p. 130, fourth-to-last line: replace “the first fence” with
“the inner loop”.
-
p. 130, third-to-last and penultimate lines: replace “immediately
before the RR fence in the last iteration of the loop” with
“at the third line of the last iteration of the inner loop”.
-
p. 131, sixth-to-last line of Figure 8.7: replace
“fence(||W)” with
“fence(W||W)”.
-
p. 15, Figure 2.3: replace all four occurrences of “==” with
“=”.
-
p. 16, Figure 2.4: replace all six occurrences of “==” with
“=”.
-
p. 31, lower right corner of table: replace “0” with
“1”.
-
Figures 4.4, 4.5, and 4.6 (pages 54 and 55): remove the
“not” sign (¬) in front of each
“TAS”.
-
p. 36, “Relationships Among” section, first line: replace
“Figure” with “Table”.
-
p. 39, line 5: replace “before val was called” with
“before val returned”.
Thanks to
Dong Chen,
Mark Hill,
Jakub Łopuszański,
Jinjian Ma,
and the students of the St. Petersburg (Russia) 2019 Summer School on
the Theory and Practice of Distributed Computing
for their help in catching these mistakes.