pragma Thread_Local_Storage ([Entity =>] LOCAL_NAME);
This pragma specifies that the specified entity, which must be
a variable declared in a library-level package, is to be marked as
“Thread Local Storage” (
TLS). On systems supporting this (which
include Windows, Solaris, GNU/Linux, and VxWorks), this causes each
thread (and hence each Ada task) to see a distinct copy of the variable.
The variable must not have default initialization, and if there is
an explicit initialization, it must be either
null for an
access variable, a static expression for a scalar variable, or a fully
static aggregate for a composite type, that is to say, an aggregate all
of whose components are static, and which does not include packed or
This provides a low-level mechanism similar to that provided by
Ada.Task_Attributes package, but much more efficient
and is also useful in writing interface code that will interact
with foreign threads.
If this pragma is used on a system where
TLS is not supported,
then an error message will be generated and the program will be rejected.