# 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.