CVS difference for ai22s/ai22-0059-1.html

Differences between 1.3 and version 1.4
Log of other versions for file ai22s/ai22-0059-1.html

--- ai22s/ai22-0059-1.html	2023/03/21 08:31:13	1.3
+++ ai22s/ai22-0059-1.html	2023/09/30 03:58:29	1.4
@@ -1,4 +1,4 @@
-<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><title>AI22-0059-1/01</title>
+<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><title>AI22-0059-1/02</title>
 <style type="text/css">
 table td,table th{padding:0}
 BODY.body{background-color:#ffffff; max-width:468pt; padding:72pt 72pt 72pt 72pt}
@@ -19,9 +19,10 @@
 </head><body class="body"><p class="l3h">AI22-0059-1</p>
 <p class="head">!standard 9.10.1(20/5) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23-01-12 &nbsp;AI22-0059-1/01</p>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23-09-13 &nbsp;AI22-0059-1/02</p>
 <p class="head">!standard 9.10.1(21/5)</p>
 <p class="head">!standard 9.10.1(23/5)</p>
+<p class="head">!standard 9.10.1(25/5)</p>
 <p class="head">!standard 13.11(17.1/5)</p>
 <p class="head">!standard 13.11(18/5)</p>
 <p class="head">!class Amendment 23-01-12</p>
@@ -40,7 +41,7 @@
 standard storage pools).</p>
 <h2 class="head">!issue</h2>
 <p class="txts">In analyzing the side effects of allocation and deallocation on storage pool
-objects. the issue arose of whether such effects are safe from conflicts due to unsynchronized
+objects, the issue arose as to whether such effects are safe from conflicts due to unsynchronized
 references to shared variables. It has generally been presumed that allocation and deallocation are
 thread safe for &quot;standard&quot; storage pools, meaning that allocators for the same access
 type (with such a storage pool) are safe even if they occur concurrently in different threads of
@@ -63,21 +64,19 @@
 an access-to-object type (including a formal access type).</p>
 
 <p class="txts">If the Parallel_Calls aspect is True for an immutably or formal limited type, then
-it is equivalent to specifying Parallel_Calls =&gt; True for every primitive subprogram of the
-type, other than Initialize and Finalize in the case of a descendant of Limited_Controlled.</p>
+the Parallel_Calls aspect shall be specified True for every primitive subprogram of the type, other
+than Initialize and Finalize in the case of a descendant of Limited_Controlled.</p>
 
 <p class="txts">If the Parallel_Calls aspect is specified True for an access-to-object type then
-the aspect Parallel_Calls =&gt; True must apply to the subprograms Allocate, Deallocate, and
-Storage_Size of its storage pool type.</p>
+the aspect Parallel_Calls shall be True for the subprograms Allocate, Deallocate, and Storage_Size
+of its storage pool type.</p>
 
 <p class="text">We define that standard storage pools always have Parallel_Calls as True for their
 primitive Allocate, Deallocate, and Storage_Size. This was already stated in informal English
 text.</p>
 <h2 class="head">!wording</h2>
 <p class="inst">Modify 9.10.1(20/5):</p>
-
-<p class="wrds">All_Parallel_Conflict_Checks</p>
-
+<p class="word">All_Parallel_Conflict_Checks</p>
 <p class="wind">This policy includes the restrictions imposed by the
 &nbsp;Known_Parallel_Conflict_Checks policy, and in addition disallows a parallel construct from
 reading or updating a variable that is global to the construct, unless it is a synchronized
@@ -88,31 +87,33 @@
 <span class="ntrm">loop_parameter_specification</span> or the chunk parameter of the parallel
 loop.</p>
 <p class="inst">Modify 9.10.1(21/5):</p>
-
-<p class="wrds">All_Tasking_Conflict_Checks</p>
-
+<p class="word">All_Tasking_Conflict_Checks</p>
 <p class="wind">This policy includes the restrictions imposed by the Known_Tasking_Conflict_Checks
 policy, and in addition disallows a task body from reading or updating a variable that is global to
 the task body, unless it is a synchronized object<span class="ins">{, or the reading or updating is
 performed using a subprogram for which Parallel_Calls is True}</span>.</p>
 <p class="inst">Modify RM 9.10.1(23/5):</p>
-
 <p class="word">For a subprogram, <span class="ins">{an access-to-object type, a type whose full
 type is immutably limited, or a formal limited private type or extension,}</span> the following
 language-defined representation aspect may be specified.</p>
+<p class="inst">Modify RM9.10.1(25/5):</p>
+<p class="word">Specifying the Parallel_Calls aspect to be True for a subprogram indicates that the
+subprogram can be safely called in parallel<span class="ins">{, even in cases when the actual
+parameters for the concurrent calls denote the same object(s)}</span>. Conflict checks (if required
+by the Conflict_Check_Policy in effect) are made on the subprogram assuming that multiple
+concurrent calls exist.[Redundant: Such checks can then be omitted on a call of the subprogram in a
+parallel iteration context.]</p>
 <p class="inst">Add after RM 9.10.1(25/5):</p>
-
 <p class="wrds">Specifying the Parallel_Calls aspect to be True for an access-to-object type
-indicates that Parallel_Calls is True for the Allocate, Deallocate, and Storage_Size primitive
-subprograms of the type of the storage pool of the access type.</p>
+requires that the Parallel_Calls aspect shall be True for the Allocate, Deallocate, and
+Storage_Size primitive subprograms of the type of the storage pool of the access type.</p>
 
 <p class="word">Specifying the Parallel_Calls aspect to be True for a limited (or formal limited)
-type indicates that the full (or actual) type is a protected or task type, or that the
-Parallel_Calls aspect is True for all primitive subprograms of the type (or all visible primitives
-of the formal type), except for the Initialize and Finalize procedures in the case of a limited
-controlled type.</p>
+type requires that the full (or actual) type shall be a protected or task type, or that the
+Parallel_Calls aspect shall be True for all primitive subprograms of the type (or all visible
+primitives of the formal type), except for the Initialize and Finalize procedures in the case of a
+limited controlled type.</p>
 <p class="inst">Modify 13.11(17.1/5):</p>
-
 <p class="wrds">The type(s) of the standard pool(s), and the primitive Allocate, Deallocate, and
 Storage_Size subprograms for the standard pool(s) are nonblocking. <span class="ins">{In addition,
 the primitive Allocate, Deallocate, and Storage_Size subprograms for the standard pool(s) have the
@@ -123,7 +124,6 @@
 <p class="word"><span class="del">[Editor&#39;s note: The original last sentence states informally
 the property that is formally provided by the new aspect.]</span></p>
 <p class="inst">Modify 13.11(18/5):</p>
-
 <p class="word">If Storage_Size is specified for an access type T, an implementation-defined pool P
 is used for the type. The Storage_Size of P is at least that requested, and the storage for P is
 reclaimed when the master containing the declaration of the access type is left. If the

Questions? Ask the ACAA Technical Agent