Intel Threading Building Blocks by James Reinders The unconfirmed error reports are from readers. They have not yet been approved or disproved by the author or editor and represent solely the opinion of the reader. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification This page was updated July 28, 2008. UNCONFIRMED errors and comments from readers: {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... {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. (49) 2nd paragraph in parallel_scan; Should be y_i = y_{i-1} + X_i rather than y_i = y_(i-1) + i (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. (119) code line below "mutex Class"; Two code lines are bound together; should be separate lines. #include "tbb/mutex.h" class mutex; {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. {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. [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);' [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. (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). {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\task_scheduler_init.h" ... They may occur elsewhere in the book as well.