Blocking Style with Children
Example 9-4 shows the recommended style for a recursive task of type T
where each level spawns k
children.
Example 9-4. Blocking style with children
task* T::execute() { if( not recursing any further ) { ... } else { set_ref_count(k+1); task& tk = new( allocate_child() ) T(...); tk.spawn(); task& tk-1= new( allocate_child() ) T(...); tk-1.spawn(); ... task& t1 = new( allocate_child() ) T(...); t1.spawn_and_wait(t1); } return NULL; }
Child construction and spawning may be reordered if convenient, as long as a task is constructed before it is spawned.
The key points of the pattern are:
The call to
set_ref_count
usesk+1
as its argument. The extra 1 is critical.Each task is allocated by
allocate_child
.
Get Intel Threading Building Blocks now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.