Errata

Intel Threading Building Blocks

Errata for Intel Threading Building Blocks

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released.

The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.

Color Key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted by Date submitted
Printed, PDF, ePub Example 3-3. Original loop code.

for (size_t i = 0; i>n; ++i)

should be

for (size_t i = 0; i < n; ++i)

Alex Tsai  Oct 31, 2016 
Printed Page 13
5th paragraph

An example would be a sequential program that takes 34 seconds to run on a one-processor machine and 17
seconds to run on a dual-core machine.

Replace quad-core (4) by dual-core (2) because 34 seconds/2 = 17 seconds...

Anonymous   
PDF Page 22
4

Page 22
When explicit synchronization and atomic operations are insufficient, locks needs to
be used.
Should be ?When implicit synchronization and? are insufficient?, because locks are explicit synchronization.

Anonymous  Aug 26, 2008 
Printed Page 32
Example 3-2

line 4 and 7 of the example are the same.

if(nthread>=1)

Would that mean it is true to initialize and terminate under the same condition?

I am not sure how to correct it or is it wrong in the first place.

Anonymous   
Printed Page 32
Example 3-2

line 4 and 7 of the example are the same.

if(nthread>=1)

Would that mean it is true to initialize and terminate under the same condition?

I am not sure how to correct it or is it wrong in the first place.

Anonymous  Jun 28, 2008 
Printed Page 42
5th paragraph

I believe "The left-to-right property allows commutative operations to work, [...]" is meant to read "non-commutative" rather than "commutative."

Anonymous  Aug 11, 2008 
Printed Page 49
2nd paragraph in parallel_scan

Should be

y_i = y_{i-1} + X_i

rather than

y_i = y_(i-1) + i

Anonymous   
Printed Page 65
duplication - Parallel Algorithms for Streams

The section below "Parallel Algorithms for Streams" duplicates what was already stated above it. This
makes the reader confused, and seems entirely unnecessary. Please check.

Anonymous   
Printed Page 67
Code listing for Example 4-4

Page 67, Code listing for Example 4-4. The third line reads 'ItemStream stream;', but it should read 'ItemStream stream(root);'.

Dave Elder  Jun 02, 2009 
Printed Page 119
code line below "mutex Class"

Two code lines are bound together; should be separate lines.

#include "tbb/mutex.h"
class mutex;

Anonymous   
Printed Page 146
Example 9-5, line starting with "task t_1 = new( c.all"

In this line, the expression "c.allocate_child()" is used, even no variable called 'c' exists. This
should simply be "allocate_child()" because 'this' has been recycled as the continuation.

Anonymous   
Printed Page 150
Example 9-9, line starting with "FibTask& a ="

This example is showing how to recycle 'this' as one of the child tasks, but the task 'this' is supposed
to replace, 'a', is still being allocated. I believe the line starting with "FibTask& a =" should be
commented out in the style used elsewhere in the example, as "// was: FibTask& a =..."

Additionally, several lines below, the call "set_ref_count(2);" should be "c.set_ref_count(2);" because
'c' is the continuation that requires that call and 'this' is now one of the children.

Anonymous   
Printed Page 150
FibTask class definitions

Hello,

I think that both examples on the page 150 ('scheduler bypass' and 'recycling') should have replaced
'set_ref_count(2)' by 'c.set_ref_count(2)' - reference count of the continuation task. Without this fix
both examples run forever.

Also, 'recycling' example should have commented a line:
'FibTask& a = *new( c.allocate_child() ) FibTask(n-2, &c.x);'

Anonymous   
Printed Page 177
3rd paragraph

Book states the following "You can download the source for all examples from this chapter from http://www.threadingbuildingblocks.org/book", but when you go to link page states this "This is the dummy content for book page. this file is named book.php"

So where does one find the exapmles?

The1GordoN  Jan 28, 2009 
Printed Page 185
Section on ParallelMerge

The source code of the ParallelMerge example (Example 11-8) is incomplete. The text on p. 186 mentionsa
ParallelMergeBody class that is missing in the source code listing.

The document at http://cache-www.intel.com/cd/00/00/30/11/301114_301114.pdf

seems to have a complete version of the same example.

Anonymous   
Printed Page 261
Box

Refers to lines 12 and 13 in example 11-53. I think 13 and 14 are
what are meant. (I have the July 2007 printing).

Anonymous   
Printed Page 261
Box

Refers to lines 12 and 13 in example 11-53. I think 13 and 14 are
what are meant. (I have the July 2007 printing).

Anonymous  Jul 26, 2008 
Printed Page 280
Code listing, includes

Most paths in the book are given in the portable tbb/... (forward slash) notation, as they should be.

On this page, however, includes are in the Windows-specific tbb... (baskslash) notation.

#include "tbb ask_scheduler_init.h"
...

They may occur elsewhere in the book as well.

Anonymous   
PDF, ePub, Mobi Page 9171
throughout these typos exist

"shownin" should be "showing"

"righth" should be "right"

"voidreverse_join(" should be "void reverse_join("

"pinto" should be "into"

"size_tmax_number_of_live_tokens" should be "size_t max_number_of_live_tokens"

"voidclear()" should be "void clear()"

"boolempty()" should be "bool empty()"

"structUpdateStressBody" should be "struct UpdateStressBody"

"<>const" should be "<>(const"

Anonymous  Sep 17, 2019