source: doc/proposals/concurrency/text/together.tex @ d67cdb7

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsdeferred_resndemanglerenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumresolv-newwith_gc
Last change on this file since d67cdb7 was d67cdb7, checked in by Peter A. Buhr <pabuhr@…>, 6 years ago

merge

  • Property mode set to 100644
File size: 2.2 KB
Line 
1% ======================================================================
2% ======================================================================
3\chapter{Putting it all together}
4% ======================================================================
5% ======================================================================
6
7
8\section{Threads as monitors}
9As it was sbtely alluded in section \ref{threads}, \code{threads} in \CFA are in factor monitors. This means that all the monitors features are available when using threads. For example, here is a very simple two thread pipeline that could be used for a simulator of a game engine :
10\begin{cfacode}
11// Visualization declaration
12thread Renderer {} renderer;
13Frame * simulate( Simulator & this );
14
15// Simulation declaration
16thread Simulator{} simulator;
17void render( Renderer & this );
18
19// Blocking call used as communication
20void draw( Renderer & mutex this, Frame * frame );
21
22// Simualation loop
23void main( Simulator & this ) {
24        while( true ) {
25                Frame * frame = simulate( this );
26                draw( renderer, frame );
27        }
28}
29
30// Rendering loop
31void main( Renderer & this ) {
32        while( true ) {
33                waitfor( draw, this );
34                render( this );
35        }
36}
37\end{cfacode}
38One of the obvious complaints of the previous code snippet (other than its toy-like simplicity) is that it does not handle exit conditions and just goes on for ever. Luckily, the monitor semantics can also be used to clearly enforce a shutdown order in a concise manner :
39\begin{cfacode}
40// Visualization declaration
41thread Renderer {} renderer;
42Frame * simulate( Simulator & this );
43
44// Simulation declaration
45thread Simulator{} simulator;
46void render( Renderer & this );
47
48// Blocking call used as communication
49void draw( Renderer & mutex this, Frame * frame );
50
51// Simualation loop
52void main( Simulator & this ) {
53        while( true ) {
54                Frame * frame = simulate( this );
55                draw( renderer, frame );
56
57                // Exit main loop after the last frame
58                if( frame->is_last ) break;
59        }
60}
61
62// Rendering loop
63void main( Renderer & this ) {
64        while( true ) {
65                   waitfor( draw, this );
66                or waitfor( ^?{}, this ) {
67                        // Add an exit condition
68                        break;
69                }
70
71                render( this );
72        }
73}
74\end{cfacode}
75
76\section{Fibers \& Threads}
Note: See TracBrowser for help on using the repository browser.