Go to the first, previous, next, last section, table of contents.


D.7 Tasking Restrictions

  1. This clause defines restrictions that can be used with a pragma Restrictions, See section 13.12 Pragma Restrictions, to facilitate the construction of highly efficient tasking run-time systems.

    Static Semantics

  2. The following restriction_identifiers are language defined:
  3. No_Task_Hierarchy
    All (nonenvironment) tasks depend directly on the environment
    task of the partition.
    
  4. No_Nested_Finalization
    Objects with controlled parts and access types that designate
    such objects shall be declared only at library level.
    
  5. No_Abort_Statements
    There are no abort_statements, and there are no calls on
    Task_Identification.Abort_Task.
    
  6. No_Terminate_Alternatives
    There are no selective_accepts with terminate_alternatives.
    
  7. No_Task_Allocators
    There are no allocators for task types or types containing
    task subcomponents.
    
  8. No_Implicit_Heap_Allocations
    There are no operations that implicitly require heap storage
    allocation to be performed by the implementation. The
    operations that implicitly require heap storage allocation
    are implementation defined.
    
  9. No_Dynamic_Priorities
    There are no semantic dependences on the package
    Dynamic_Priorities.
    
  10. No_Asynchronous_Control
    There are no semantic dependences on the package
    Asynchronous_Task_Control.
    
  11. The following restriction_parameter_identifiers are language defined:
  12. Max_Select_Alternatives
    Specifies the maximum number of alternatives in a
    selective_accept.
    
  13. Max_Task_Entries
    Specifies the maximum number of entries per task. The bounds
    of every entry family of a task unit shall be static, or
    shall be defined by a discriminant of a subtype whose
    corresponding bound is static. A value of zero indicates
    that no rendezvous are possible.
    
  14. Max_Protected_Entries
    Specifies the maximum number of entries per protected type.
    The bounds of every entry family of a protected unit shall be
    static, or shall be defined by a discriminant of a subtype
    whose corresponding bound is static.
    

    Dynamic Semantics

  15. If the following restrictions are violated, the behavior is implementation defined. If an implementation chooses to detect such a violation, Storage_Error should be raised.
  16. The following restriction_parameter_identifiers are language defined:
  17. Max_Storage_At_Blocking
    Specifies the maximum portion (in storage elements) of a
    task's Storage_Size that can be retained by a blocked task.
    
  18. Max_Asynchronous_Select_Nesting
    Specifies the maximum dynamic nesting level of
    asynchronous_selects. A value of zero prevents the use of any
    asynchronous_select.
    
  19. Max_Tasks
    Specifies the maximum number of task creations that may be
    executed over the lifetime of a partition, not counting the
    creation of the environment task.
    
  20. It is implementation defined whether the use of pragma Restrictions results in a reduction in executable program size, storage requirements, or execution time. If possible, the implementation should provide quantitative descriptions of such effects for each restriction.

    Implementation Advice

  21. When feasible, the implementation should take advantage of the specified restrictions to produce a more efficient implementation.

    NOTES

  22. (29) The above Storage_Checks can be suppressed with pragma Suppress.


Go to the first, previous, next, last section, table of contents.