5.4 Thread Groups
A thread group represents an organizational component to logically group threads contained in processes.  The type of a thread group component specifies the features and required subcomponent access through which threads contained in a thread group interact with components outside the thread group.  Thread group implementations represent the contained threads and their connectivity.  Thread groups can have multiple modes, each representing a possibly different configuration of subcomponents, their connections, and mode-specific property associations. Thread groups can be hierarchically nested.
A thread group does not represent a virtual address space nor does it represent a unit of execution.  Therefore, a thread group must be contained within a process.
Legality Rules
Category
Type
Implementation
thread group
Features:
    • server subprogram
    • port
    • port group
    • provides data access
    • requires data access
Flow specifications: yes
Properties: yes
Subcomponents:
    • data
    • thread
    • thread group
Subprogram calls: no
Connections: yes
Flows: yes
Modes: yes
Properties: yes

A thread group component type can contain provides and requires data access, as well as port, port group, and server subprogram declarations.  It can also contain flow specifications and property associations.
A thread group component implementation can contain data, thread, and thread group declarations.
An instantiable thread group component implementation must contain at least one thread subcomponent or one thread group subcomponent. 
A thread group must not contain a subprogram calls subclause.
Standard Properties
-- Properties related to source text
Source_Text: inherit list of aadlstring
-- Inhertable thread properties
Synchronized_Component: inherit aadlboolean => true

Active_Thread_Handling_Protocol:
   inherit Supported_Active_Thread_Handling_Protocols
         => value(Default_Active_Thread_Handling_Protocol)
Period: inherit Time
Deadline: Time => inherit value(Period)
-- Properties specifying constraints for processor and memory binding
Allowed_Processor_Binding_Class:
   inherit list of classifier (processor, system)
Allowed_Processor_Binding: inherit list of reference (processor, system)
Actual_Processor_Binding: inherit reference (processor)
Allowed_Memory_Binding_Class:
   inherit list of classifier (memory, system, processor)
Allowed_Memory_Binding: inherit list of reference (memory, system, processor)
Actual_Memory_Binding: inherit reference (memory)
Allowed_Connection_Binding_Class:
   inherit list of classifier(processor, bus, device)
Allowed_Connection_Binding: inherit list of reference (bus, processor, device)
Actual_Connection_Binding: inherit reference (bus, processor, device)
NOTES:
Property associations of thread groups are inheritable (see Section 10.3) by contained subcomponents. This means if a contained thread does not have a property value defined for a particular property, then the corresponding property value for the thread group is used.
Semantics
A thread group allows threads contained in processes to be logically organized into a hierarchy.  A thread group type declares the features and required subcomponent access through which threads contained in a thread group can interact with components declared outside the thread group.
A thread group implementation contains threads, data components, and thread groups.  Thread group nesting permits threads to be organized hierarchically.  A thread group implementation also contains connections to specify the interactions between the contained subcomponents and modes to represent different configurations of subsets of subcomponents and connections as well as mode-specific property associations.