### 5.1 PolyORB Tasking runtimes

PolyORB may use any of three different tasking runtimes to manage and synchronize tasks, if any. Tasking runtime capabilities are defined in the Ada Reference Manual [ISO06].

The choice of a specific tasking runtime is a compile-time parameter, Tasking runtimes for more details on their configuration.

#### 5.1.1 Full tasking runtime

Full tasking runtime refers to the configuration in which there are dependencies on the tasking constructs defined in chapter 9 of [ISO06]. It makes use of all capabilities defined in this section to manage and synchronize tasks.

In this configuration, a PolyORB application must be compiled and linked with a tasking-capable Ada runtime.

#### 5.1.2 No tasking runtime

No tasking runtime refers to the configuration in which there is no dependency on tasking constructs. Thus, no tasking is required.

In this configuration, a PolyORB application may be compiled and linked with a tasking-capable Ada runtime or a no-tasking Ada runtime.

#### 5.1.3 Ravenscar tasking runtime

Ravenscar tasking runtime refers to the configuration in which tasking constructs are compliant with the Ravenscar tasking restricted profile.

In this configuration, a PolyORB application may be compiled and linked with a tasking-capable Ada runtime or a Ravenscar Ada runtime.

To configure tasking constructs used by PolyORB, one must instantiate the `PolyORB.Setup.Tasking.Ravenscar` generic package shown below to set up tasks and protected objects used by PolyORB core.

    ------------------------------------------------------------------------------
    --                                                                          --
    --                           POLYORB COMPONENTS                             --
    --                                                                          --
    --      P O L Y O R B . S E T U P . T A S K I N G . R A V E N S C A R       --
    --                                                                          --
    --                                 S p e c                                  --
    --                                                                          --
    --         Copyright (C) 2002-2012, Free Software Foundation, Inc.          --
    --                                                                          --
    -- This is free software;  you can redistribute it  and/or modify it  under --
    -- terms of the  GNU General Public License as published  by the Free Soft- --
    -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
    -- sion.  This software is distributed in the hope  that it will be useful, --
    -- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
    -- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
    -- License for  more details.                                               --
    --                                                                          --
    --                                                                          --
    -- You should have received a copy of the GNU General Public License and    --
    -- a copy of the GCC Runtime Library Exception along with this program;     --
    -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
    -- <http://www.gnu.org/licenses/>.                                          --
    --                                                                          --
    --                  PolyORB is maintained by AdaCore                        --
    --                     (email: sales@adacore.com)                           --
    --                                                                          --
    ------------------------------------------------------------------------------

    --  You should instantiate this package to set up a ravenscar profile.

    with System;

    with PolyORB.Tasking.Profiles.Ravenscar.Threads.Annotations;

    with PolyORB.Tasking.Profiles.Ravenscar.Threads;
    with PolyORB.Tasking.Profiles.Ravenscar.Mutexes;
    with PolyORB.Tasking.Profiles.Ravenscar.Condition_Variables;

    generic
       Number_Of_Application_Tasks    : Integer;
       --  Number of tasks created by the user.

       Number_Of_System_Tasks         : Integer;
       --  Number of tasks created by the PolyORB run-time library.

       Number_Of_Conditions           : Integer;
       --  Number of preallocated conditions.

       Number_Of_Mutexes              : Integer;
       --  Number of preallocated mutexes.

       Task_Priority                  : System.Priority;
       --  Priority of the tasks of the pool.

       Storage_Size                   : Natural;
       --  Stack size of the system tasks.

    package PolyORB.Setup.Tasking.Ravenscar is

       package Threads_Package is
          new PolyORB.Tasking.Profiles.Ravenscar.Threads
         (Number_Of_Application_Tasks,
          Number_Of_System_Tasks,
          Task_Priority,
          Storage_Size);

       package Thread_Annotations_Package is new Threads_Package.Annotations;

       package Conditions_Package is
          new PolyORB.Tasking.Profiles.Ravenscar.Condition_Variables
         (Threads_Package,
          Number_Of_Conditions);

       package Mutexes_Package is
          new PolyORB.Tasking.Profiles.Ravenscar.Mutexes
         (Threads_Package,
          Number_Of_Mutexes);

    end PolyORB.Setup.Tasking.Ravenscar;