Task Blocks
Task blocks use the well-known fork-join paradigm for the parallel execution of tasks. They are already part for the Technical Specification for C++ Extension Parallelism Version 2; therefore, it’s quite probable that we get them with C++20.
Who invented it in C++? Both Microsoft with its Parallel Patterns Library (PPL) and Intel with its Threading Building Blocks (TBB) were involved in the proposal N4441. Additionally, Intel used its experience with their Cilk Plus library.
The name fork-join is quite easy to explain.
Fork and Join
The most straightforward approach to explain the fork-join paradigm is a graphic.
How does it work?
The creator invokes define_task_block
or define_task_block_restore_thread
. This call creates a task block that can create tasks or it can wait for their completion. The synchronisation is at the end of the task block. The creation of a new task is the fork phase; the synchronisation of the...