1.. _design_patterns:
2
3Design Patterns
4===============
5
6
7This section provides some common parallel programming patterns and how
8to implement them in |full_name|.
9
10
11The description of each pattern has the following format:
12
13
14-  **Problem** – describes the problem to be solved.
15
16
17-  **Context** – describes contexts in which the problem arises.
18
19
20-  **Forces** - considerations that drive use of the pattern.
21
22
23-  **Solution** - describes how to implement the pattern.
24
25
26-  **Example** – presents an example implementation.
27
28
29Variations and examples are sometimes discussed. The code examples are
30intended to emphasize key points and are not full-fledged code. Examples
31may omit obvious const overloads of non-const methods.
32
33
34Much of the nomenclature and examples are adapted from Web pages created
35by Eun-Gyu and Marc Snir, and the Berkeley parallel patterns wiki. See
36links in the **General References** section.
37
38
39For brevity, some of the code examples use C++11 lambda expressions. It
40is straightforward, albeit sometimes tedious, to translate such lambda
41expressions into equivalent C++03 code.
42
43.. toctree::
44   :maxdepth: 4
45
46   ../../tbb_userguide/design_patterns/Agglomeration
47   ../../tbb_userguide/design_patterns/Elementwise
48   ../../tbb_userguide/design_patterns/Odd-Even_Communication
49   ../../tbb_userguide/design_patterns/Wavefront
50   ../../tbb_userguide/design_patterns/Reduction
51   ../../tbb_userguide/design_patterns/Divide_and_Conquer
52   ../../tbb_userguide/design_patterns/GUI_Thread
53   ../../tbb_userguide/design_patterns/Non-Preemptive_Priorities
54   ../../tbb_userguide/design_patterns/Lazy_Initialization
55   ../../tbb_userguide/design_patterns/Local_Serializer
56   ../../tbb_userguide/design_patterns/Fenced_Data_Transfer
57   ../../tbb_userguide/design_patterns/Reference_Counting
58   ../../tbb_userguide/design_patterns/General_References
59