12. **Ravenscar**: patterns for multitasking
********************************************

GNATColl provides a set of patterns for concurrent programming using
Ravenscar-compliant semantics only. The core goal of the
GNATCOLL.Ravenscar (sub) packages is to ease the development of high-
integrity multitasking applications by factorizing common behavior
into instantiable, Ravenscar-compliant, generic packages. Instances of
such generic packages guarantee predictable timing behavior and thus
permit the application of most common timing analysis techniques.


12.1. Tasks
===========

The *GNATCOLL.Ravenscar.Simple_Cyclic_Task* generic package lets
instantiate a cyclic tasks executing the same operation at regular
time intervals; on the other side, the
*GNATCOLL.Ravenscar.Simple_Sporadic_Task* task lets instantiate
sporadic tasks enforcing a minimum inter-release time.


12.2. Servers
=============

Servers present a more sophisticated run-time semantics than tasks:
for example, they can fulfill different kind of requests (see multiple
queues servers).  *Gnat.Ravenscar.Sporadic_Server_With_Callback* and
*Gnat.Ravenscar.Timed_Out_Sporadic_Server* are particularly
interesting. The former shows how synchronous inter-task communication
can be faked in Ravenscar (the only form of communication permitted by
the profile is through shared resources): the server receives a
request to fulfill, computes the result and returns it by invoking a
call-back. The latter enforces both a minimum and a maximum inter-
release time: the server automatically releases itself and invokes an
appropriate handler if a request is not posted within a given period
of time.


12.3. Timers
============

*Gnat.Ravenscar.Timers.One_Shot_Timer* is the Ravenscar implementation
of time-triggered event through Ada 2005 Timing Events.
