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