!standard 13.11(17.1/5) 21-01-21 AI12-0424-1/01 !class binding interpretation 21-01-20 !status Amendment 1-2012 21-01-21 !status ARG Approved 10-0-5 21-01-20 !status work item 20-01-20 !status received 20-01-20 !priority Low !difficulty Easy !qualifier Omission !subject Concurrency and the standard storage pool !summary The operations of standard pool can be used concurrently without any conflict. !question Do calls on Allocate, Deallocate, and Storage_Size for a standard storage pool conflict when invoked concurrently? (No.) The introduction to Annex A includes a requirement that concurrent calls on language-defined subprograms are required to not conflict so long as the possibly reference parameters do not overlap. But storage pools are by-reference, and a single pool object can be used to represent the standard pool, so this requirement does not answer the question. !recommendation (See Summary.) !wording Modify 13.11(17.1/5): The type(s) of the standard pool(s), and the primitive Allocate, Deallocate, and Storage_Size subprograms for the standard pool(s) are nonblocking. {Concurrent invocations of these subprograms do not conflict with one another (see 9.10) when applied to standard storage pools.} !discussion Although it has generally been assumed, there was no specific statement that concurrent allocators from a standard storage pool were safe, and did not represent any sort of race condition. As noted in the question, the existing requirements do not address this case. Therefore, we add such a statement, along with the existing statement that they are nonblocking. Note that an implementation could use multiple standard storage pool objects. But to ensure that the Annex A requirement was in force, a separate standard storage pool object is used for every possibly concurrent operation (allocation, deallocation, and storage_size). That seems impractical, as even an object per type is not necessarily enough (in particular, a parellel operation could do parallel allocations of a single type). !ASIS No ASIS effect. !ACATS test One could have a C-Test that checks that concurrent allocations and deallocations work. But such a test is likely to pass even if there is a concurrency conflict - problems tend to be intermittent. It also would be necessary to guess some of the possible failures if there was a conflict. Thus, such a test is of low priority. !appendix ****************************************************************