July 2007
Intermediate to advanced
332 pages
10h 4m
English
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 uses k+1 as its argument. The extra 1 is critical.
Each task is allocated by allocate_child.