Version 1.2 of ai12s/ai12-0354-1.txt
!standard 5.5.1(21/3) 20-01-10 AI12-0354-1/01
!class Amendment 20-01-10
!status work item 20-01-10
!status received 19-11-18
!priority Low
!difficulty Easy
!subject Semantics of Parallel_Iterators
!summary
It is erroneous if a parallel iterator does not return cursors that identify
distinct elements.
!problem
We don't have any requirement that the cursors return by First/Next for a
Parallel_Iterator identify distinct elements. If that is not true, then
parallel operations on a result cursor can lead to data races and erroneous
execution.
!proposal
(See Summary.)
!wording
Add after 5.5.1(21/3):
Erroneous Execution
A call on the First or Next operation on a given Parallel_Iterator object
with a given Chunk value, which does not propagate an exception, should return
a Cursor value that either yields False when passed to Has_Element, or that
identifies an element distinct from any Cursor value returned by a call on a
First or Next operation on the same Parallel_Iterator object with a different
Chunk value. If the First or Next operations with a Chunk parameter behave
in any other manner, execution is erroneous.
!discussion
We follow the model of storage pools here, and declare an implementation that
fails to return cursors that designate distinct elements erroneous. Using such
cursors are likely to be erroneous anyway, so this is not really introducing a
new kind of erroneousness.
!ASIS
No ASIS effect.
!ACATS test
Erroneous execution is untestable.
!appendix
From: Tucker Taft
Sent: Saturday, November 16, 2019 2:13 PM
We should probably establish a requirement that the First/Next routines
of parallel iterators that take a "chunk" parameter produce a sequence
of Cursor values for a given chunk index that are non-overlapping with
those produced by the First/Next routines for any other in-range chunk index
value. Currently there is no dynamic semantics for these routines in 5.5.1.
I might suggest the following, modeled after how Storage_Pool operations are
described:
Erroneous Execution
A call on the First or Next operation on a given Parallel_Iterator object
with a given Chunk value, which does not propagate an exception, should return
a Cursor value that either yields False when passed to Has_Element, or that
identifies an element distinct from any Cursor value returned by a call on a
First or Next operation on the same Parallel_Iterator object with a different
Chunk value. If the First or Next operations with a Chunk parameter behave
in any other manner, execution is erroneous.
****************************************************************
Questions? Ask the ACAA Technical Agent