\makeglossaries

\longnewglossaryentry{callsite-locking}
{name={callsite-locking}}
{
Locking done by the calling routine. With this technique, a routine calling a monitor routine aquires the monitor \emph{before} making the call to the actuall routine.
}

\longnewglossaryentry{entry-point-locking}
{name={entry-point-locking}}
{
Locking done by the called routine. With this technique, a monitor routine called by another routine aquires the monitor \emph{after} entering the routine body but prior to any other code.
}

\longnewglossaryentry{bulk-acq}
{name={bulk-acquiring}}
{
Implicitly acquiring several monitors when entering a monitor.
}

\longnewglossaryentry{multi-acq}
{name={multiple-acquisition}}
{
Any locking technique that allows a single thread to acquire the same lock multiple times.
}

\longnewglossaryentry{mon-ctx}
{name={monitor context}}
{
The state of the current thread regarding which monitors are owned.
}


\longnewglossaryentry{uthread}
{name={user-level thread}}
{
Threads created and managed inside user-space. Each thread has its own stack and its own thread of execution. User-level threads are invisible to the underlying operating system.

\textit{Synonyms : User threads, Lightweight threads, Green threads, Virtual threads, Tasks.}
}

\longnewglossaryentry{kthread}
{name={kernel-level thread}}
{
Threads created and managed inside kernel-space. Each thread has its own stack and its own thread of execution. Kernel-level threads are owned, managed and scheduled by the underlying operating system.

\textit{Synonyms : OS threads, Hardware threads, Physical threads.}
}

\longnewglossaryentry{fiber}
{name={fiber}}
{
Fibers are non-preemptive user-level threads. They share most of the caracteristics of user-level threads except that they cannot be preempted by another fiber.

\textit{Synonyms : Tasks.}
}

\longnewglossaryentry{job}
{name={job}}
{
Unit of work, often sent to a thread pool or worker pool to be executed. Has neither its own stack nor its own thread of execution.

\textit{Synonyms : Tasks.}
}

\longnewglossaryentry{pool}
{name={thread-pool}}
{
Group of homogeneuous threads that loop executing units of works after another.

\textit{Synonyms : }
}

\longnewglossaryentry{cfacluster}
{name={cluster}}
{
A group of \gls{kthread} executed in isolation.

\textit{Synonyms : None.}
}

\longnewglossaryentry{cfathread}
{name={thread}}
{
User level threads that are the default in \CFA. Generally declared using the \code{thread} keyword.

\textit{Synonyms : None.}
}

\longnewglossaryentry{preemption}
{name={preemption}}
{
Involuntary context switch imposed on threads at a specified rate.

\textit{Synonyms : None.}
}

\newacronym{tls}{TLS}{Thread Local Storage}
\newacronym{api}{API}{Application Program Interface}
\newacronym{raii}{RAII}{Resource Acquisition Is Initialization}
\newacronym{numa}{NUMA}{Non-Uniform Memory Access}
