File: AA-9-3.html

package info (click to toggle)
ada-reference-manual 20021112web-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny, sarge
  • size: 18,652 kB
  • ctags: 8,921
  • sloc: makefile: 52; sh: 20
file content (206 lines) | stat: -rw-r--r-- 16,213 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Task Dependence - Termination of Tasks</TITLE>
    <META NAME="Author" CONTENT="JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor">
    <META NAME="GENERATOR" CONTENT="Arm_Form.Exe, Ada Reference Manual generator">
    <STYLE type="text/css">
    DIV.paranum {position: absolute; font-family: Arial, Helvetica, sans-serif; left: 0.5 em; top: auto}
    TT {font-family: "Courier New", monospace}
    DT {display: compact}
    DIV.Normal {font-family: "Times New Roman", Times, serif; margin-bottom: 0.6em}
    DIV.Wide {font-family: "Times New Roman", Times, serif; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Annotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.WideAnnotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Index {font-family: "Times New Roman", Times, serif}
    DIV.SyntaxSummary {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Notes {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.NotesHeader {font-family: "Times New Roman", Times, serif; margin-left: 2.0em}
    DIV.SyntaxIndented {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Indented {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-bottom: 0.6em}
    DIV.CodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.SmallIndented {font-family: "Times New Roman", Times, serif; margin-left:  10.0em; margin-bottom: 0.6em}
    DIV.SmallCodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.Examples {font-family: "Courier New", monospace; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.SmallExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 7.5em; margin-bottom: 0.6em}
    DIV.IndentedExamples {font-family: "Courier New", monospace; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.SmallIndentedExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left:  15.0em; margin-bottom: 0.6em}
    UL.Bulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.IndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.Hanging {font-family: "Times New Roman", Times, serif; margin-top: 0em; margin-bottom: 0.6em}
    DD.Hanging {margin-left: 6.0em}
    DL.IndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.IndentedHanging {margin-left: 2.0em}
    DL.HangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.HangingInBulleted {margin-left: 4.0em}
    DL.SmallHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallHanging {margin-left: 7.5em}
    DL.SmallIndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallIndentedHanging {margin-left: 2.0em}
    DL.SmallHangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallHangingInBulleted {margin-left: 5.0em}
    DL.Enumerated {font-family: "Times New Roman", Times, serif; margin-right: 0.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.Enumerated {margin-left: 2.0em}
    DL.SmallEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallEnumerated {margin-left: 2.5em}
    DL.NestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.SmallNestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    </STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFF0" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-9-2.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-9-4.html">Next</A></P>
<HR>
<H1> 9.3 Task Dependence - Termination of Tasks</H1>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;<A NAME="I3521"></A><A NAME="I3522"></A><A NAME="I3523"></A><A NAME="I3524"></A>Each
task (other than an environment task  -- see <A HREF="AA-10-2.html">10.2</A>)
<I>depends</I> on one or more masters (see <A HREF="AA-7-6-1.html">7.6.1</A>),
as follows: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>If the task is created by the evaluation of an <FONT FACE="Arial, Helvetica">allocator</FONT>
for a given access type, it depends on each master that includes the
elaboration of the declaration of the ultimate ancestor of the given
access type.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>If the task is created by the elaboration of an <FONT FACE="Arial, Helvetica">object_declaration</FONT>,
it depends on each master that includes this elaboration. </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I3525"></A>Furthermore, if a task depends
on a given master, it is defined to depend on the task that executes
the master, and (recursively) on any master of that task. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>Don't confuse
these kinds of dependences with the dependences among compilation units
defined in <A HREF="AA-10-1-1.html">10.1.1</A>, ``<A HREF="AA-10-1-1.html">Compilation
Units - Library Units</A>''. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;A task is said to be <I>completed</I> when the
execution of its corresponding <FONT FACE="Arial, Helvetica">task_body</FONT>
is completed. A task is said to be <I>terminated</I> when any finalization
of the <FONT FACE="Arial, Helvetica">task_body</FONT> has been performed
(see <A HREF="AA-7-6-1.html">7.6.1</A>). [The first step of finalizing
a master (including a <FONT FACE="Arial, Helvetica">task_body</FONT>)
is to wait for the termination of any tasks dependent on the master.]
<A NAME="I3526"></A>The task executing the master is blocked until all
the dependents have terminated. [Any remaining finalization is then performed
and the master is left.]</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6/1</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Completion of
a task (and the corresponding <FONT FACE="Arial, Helvetica">task_body</FONT>)
can occur when the task is blocked at a <FONT FACE="Arial, Helvetica">select_statement</FONT>
with an <S>an </S>open <FONT FACE="Arial, Helvetica">terminate_alternative</FONT>
(see <A HREF="AA-9-7-1.html">9.7.1</A>); the open <FONT FACE="Arial, Helvetica">terminate_alternative</FONT>
is selected if and only if the following conditions are satisfied: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>The task depends on some completed master;</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Each task that depends on the master considered is either
already terminated or similarly blocked at a <FONT FACE="Arial, Helvetica">select_statement</FONT>
with an open <FONT FACE="Arial, Helvetica">terminate_alternative</FONT>.
</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;When both conditions are satisfied, the task considered
becomes completed, together with all tasks that depend on the master
considered that are not yet completed. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>Any required
finalization is performed after the selection of <FONT FACE="Arial, Helvetica">terminate_alternative</FONT>s.
The tasks are not callable during the finalization. In some ways it is
as though they were aborted. </FONT></DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>8&nbsp;&nbsp;The full view of a limited
private type can be a task type, or can have subcomponents of a task
type. Creation of an object of such a type creates dependences according
to the full type.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>9&nbsp;&nbsp;An <FONT FACE="Arial, Helvetica">object_renaming_declaration</FONT>
defines a new view of an existing entity and hence creates no further
dependence.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>10&nbsp;&nbsp;The rules given for the
collective completion of a group of tasks all blocked on <FONT FACE="Arial, Helvetica">select_statement</FONT>s
with open <FONT FACE="Arial, Helvetica">terminate_alternative</FONT>s
ensure that the collective completion can occur only when there are no
remaining active tasks that could call one of the tasks being collectively
completed.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>11&nbsp;&nbsp;If two or more tasks are
blocked on <FONT FACE="Arial, Helvetica">select_statement</FONT>s with
open <FONT FACE="Arial, Helvetica">terminate_alternative</FONT>s, and
become completed collectively, their finalization actions proceed concurrently.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Notes" Style="margin-bottom: 0.4em"><FONT SIZE=-1>12&nbsp;&nbsp;The
completion of a task can occur due to any of the following: </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<UL Class="NotesBulleted"><FONT SIZE=-1><LI TYPE=DISC>the raising of an exception during the elaboration of the
<FONT FACE="Arial, Helvetica">declarative_part</FONT> of the corresponding
<FONT FACE="Arial, Helvetica">task_body</FONT>;</LI></FONT></UL>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<UL Class="NotesBulleted"><FONT SIZE=-1><LI TYPE=DISC>the completion of the <FONT FACE="Arial, Helvetica">handled_sequence_of_statements</FONT>
of the corresponding <FONT FACE="Arial, Helvetica">task_body</FONT>;</LI></FONT></UL>
<DIV Class="Paranum"><FONT SIZE=-2>17</FONT></DIV>
<UL Class="NotesBulleted"><FONT SIZE=-1><LI TYPE=DISC>the selection of an open <FONT FACE="Arial, Helvetica">terminate_alternative</FONT>
of a <FONT FACE="Arial, Helvetica">select_statement</FONT> in the corresponding
<FONT FACE="Arial, Helvetica">task_body</FONT>;</LI></FONT></UL>
<DIV Class="Paranum"><FONT SIZE=-2>18</FONT></DIV>
<UL Class="NotesBulleted"><FONT SIZE=-1><LI TYPE=DISC>the abort of the task. </LI></FONT></UL>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>19</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Example of task
dependence:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>20</FONT></DIV>
<DIV Class="Examples"><TT><B>declare</B><BR>
&nbsp;&nbsp;&nbsp;<B>type</B>&nbsp;Global&nbsp;<B>is</B>&nbsp;<B>access</B>&nbsp;Server;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>--&nbsp;&nbsp;see&nbsp;<A HREF="AA-9-1.html">9.1</A></I><BR>
&nbsp;&nbsp;&nbsp;A,&nbsp;B&nbsp;:&nbsp;Server;<BR>
&nbsp;&nbsp;&nbsp;G&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Global;<BR>
<B>begin</B><BR>
&nbsp;&nbsp;&nbsp;<I>--&nbsp;&nbsp;activation&nbsp;of&nbsp;A&nbsp;and&nbsp;B</I><BR>
&nbsp;&nbsp;&nbsp;<B>declare</B><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>type</B>&nbsp;Local&nbsp;<B>is</B>&nbsp;<B>access</B>&nbsp;Server;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X&nbsp;:&nbsp;Global&nbsp;:=&nbsp;<B>new</B>&nbsp;Server;&nbsp;&nbsp;<I>--&nbsp;&nbsp;activation&nbsp;of&nbsp;X.<B>all</B></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L&nbsp;:&nbsp;Local&nbsp;&nbsp;:=&nbsp;<B>new</B>&nbsp;Server;&nbsp;&nbsp;<I>--&nbsp;&nbsp;activation&nbsp;of&nbsp;L.<B>all</B></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C&nbsp;:&nbsp;Server;<BR>
&nbsp;&nbsp;&nbsp;<B>begin</B><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>--&nbsp;&nbsp;activation&nbsp;of&nbsp;C</I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G&nbsp;:=&nbsp;X;&nbsp;&nbsp;<I>--&nbsp;&nbsp;both&nbsp;G&nbsp;and&nbsp;X&nbsp;designate&nbsp;the&nbsp;same&nbsp;task&nbsp;object</I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<BR>
&nbsp;&nbsp;&nbsp;<B>end;</B>&nbsp;&nbsp;<I>--&nbsp;&nbsp;await&nbsp;termination&nbsp;of&nbsp;C&nbsp;and&nbsp;L.<B>all</B>&nbsp;(but&nbsp;not&nbsp;X.<B>all</B>)</I><BR>
&nbsp;&nbsp;&nbsp;...<BR>
<B>end;</B>&nbsp;&nbsp;<I>--&nbsp;&nbsp;await&nbsp;termination&nbsp;of&nbsp;A,&nbsp;B,&nbsp;and&nbsp;G.<B>all</B></I></TT></DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>20.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>We have revised the wording to
be consistent with the definition of master now given in <A HREF="AA-7-6-1.html">7.6.1</A>,
``<A HREF="AA-7-6-1.html">Completion and Finalization</A>''.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>20.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Tasks that used to depend on library
packages in Ada 83, now depend on the (implicit) <FONT FACE="Arial, Helvetica">task_body</FONT>
of the environment task (see <A HREF="AA-10-2.html">10.2</A>). Therefore,
the environment task has to wait for them before performing library level
finalization and terminating the partition. In Ada 83 the requirement
to wait for tasks that depended on library packages was not as clear.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>20.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>What was &quot;collective termination&quot;
is now &quot;collective completion&quot; resulting from selecting <FONT FACE="Arial, Helvetica">terminate_alternative</FONT>s.
This is because finalization still occurs for such tasks, and this happens
after selecting the <FONT FACE="Arial, Helvetica">terminate_alternative</FONT>,
but before termination. </FONT></DIV>

<HR>
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-9-2.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-9-4.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>