# Design Patterns

This section provides some common parallel programming patterns and how to implement them in Intel® Threading Building Blocks (Intel® TBB).

The description of each pattern has the following format:

- Problem – describes the problem to be solved.

- Context – describes contexts in which the problem arises.

- Forces . considerations that drive use of the pattern.

- Solution . describes how to implement the pattern.

- Example – presents an example implementation.

Variations and examples are sometimes discussed. The code examples are intended to emphasize key points and are not full-fledged code. Examples may omit obvious const overloads of non-const methods.

Much of the nomenclature and examples are adapted from Web pages created by Eun-Gyu and Marc Snir, and the Berkeley parallel patterns wiki. See links in the General References section.

For brevity, some of the code examples use C++11 lambda expressions. It is straightforward, albeit sometimes tedious, to translate such lambda expressions into equivalent C++98 code.

Parent topic: Intel® Threading Building Blocks (Intel® TBB) User Guide

- Agglomeration
- Elementwise
- Odd-Even Communication
- Wavefront
- Reduction
- Divide and Conquer
- GUI Thread
- Non-Preemptive Priorities
- Local Serializer
- Fenced Data Transfer
- Lazy Initialization
- Reference Counting
- Compare and Swap Loop
- General References

## See Also

Lambda Expressions
General References