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 uses k+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.