9. Apéndice C. GLOSARIO DE TÉRMINOS.

A continuación se presenta una lista en orden alfabético de algunos de los términos más importantes empleados en el entorno de la programación con hilos. Algunos de ellos están en inglés, pues suele ser este el idioma habitual con el que se refiere a tales conceptos. Se intenta dar una breve explicación del término sin pretender que ésta sea una definición, ya que en ocasiones el término sólo se comprende bien dentro de un contexto más amplio.

Async Safety : Algunas rutinas de biblioteca pueden ser llamadas sin problemas desde el interior de los gestores de señales. Esto se conoce como seguridad asíncrona. Un hilo que ejecuta código seguro no entrará en deadlock si es interrumpido por una señal. Para crear código seguro se deben bloquear las señales antes de realizar cualquier bloqueo, para evitar posibles deadlocks.

Asynchronous System Calls : Véase Llamadas al Sistema sin Bloqueo.

Atributos de Mútex : Características del objeto de sincronización mútex.

Atributos de Variable de Condición : Características del objeto de sincronización variable de condición.

Blocking System Calls : Véase Llamadas al Sistema con Bloqueo.

Call-Once Functions : Funciones de ejecución una sola vez. Véase Ejecución una sola vez.

Cambio de Contexto : Es la acción de conmutar entra la ejecución de un hilo a la ejecución de otro hilo, es decir, transferir el control desde el hilo actual a otro nuevo.

Cancellation : Véase Cancelación.

Cancelación : Destrucción de un hilo desde otro hilo. Normalmente la cancelación de un hilo en ejecución es problemática, puesto que puede tener bloqueados recursos que necesite otro hilo. Para evitar esto se suelen definir una serie de funciones destructoras que son ejecutadas cuando el hilo es cancelado, o bien, se puede definir el tipo de cancelación que puede aceptar el hilo, como es la cancelación diferida.

Cancelación Diferida : La cancelación diferida es un tipo de cancelación que permite que un hilo sólo pueda ser cancelado cuando alcanza un punto de cancelación, marcado por funciones especiales. Un hilo sobre el que se solicita una cancelación, y tiene activada la cancelación diferida sólo es suspendido al alcanzar un punto de cancelación.

Condiciones de Ejecución : Se refiere a los condiciones que se pueden dar en la ejecución de un hilo. Como los hilos se ejecutan de forma concurrente, dos ejecuciones del mismo programa multihilo pueden ser distintas, y producir resultados distintos sino se emplean bloqueos y sincronización, ya que no se deben hacer consideraciones sobre el tiempo.

Condition Variable Attributes : Véase Atributos de Variable de condición.

Condition Variable : Véase Variable de condición.

Context Switch : Véase Cambio de Contexo.

Critical Section : Véase Sección Crítica.

Datos Específicos de Hilo : Datos que son locales a cada hilo ya que no son compartidos con el resto de hilos, pero son globales al hilo, ya que pueden ser accedidos por todas las funciones del hilo. Normalmente en el heap del proceso se almacenan todos los datos específicos de cada uno de los hilos del proceso. Los datos específicos de cada hilo son destruidos al finalizar el hilo, y normalmente existen funciones destructoras que son llamadas al finalizar el hilo para realizar esta función.

Detached Thread : Véase Hilo Independiente.

Ejecución Una Sola Vez : Característica que permite limitar la ejecución de una función particular a una sola vez. Las llamadas posteriores regresarán sin la ejecución de la función y sin error.

Exclusión Mutua : Véase Mútex.

Hardweight Process : Véase Proceso Pesado.

Hilo : Véase Thread.

Hilo Independiente : Es un hilo cuya finalización no es esperada por ningún otro hilo, de forma que si el hilo finaliza, es destruido inmediatamente, ya que no se necesita mantener su estado en memoria en espera de la sincronización con otro hilo.

Hilo Sincronizable : Es un hilo cuya finalización debe ser esperada por algún hilo (normalmente el hilo que lo creó) que capturará su estado de salida, con el fin de liberar completamente la memoria que ocupa y ser destruido.

Hilo-no-seguro : Es aquel código que no está preparado para ser ejecutado en una aplicación multihilo porque emplea datos estáticos o globales. Una solución a este problema es emplear un bloqueo global antes de llamar a este tipo de código, lo que garantiza que sólo un hilo estará ejecutando el código en un momento dado.

Hilo-reentrante : Es aquel código hilo-seguro, que además permite que se ejecuten varias llamadas de forma concurrente sin bloqueos.

Hilo-seguro : Normalmente se dice que un código es hilo-seguro, si puede ser ejecutado en un programa multihilo sin problemas. Es decir, es código que puede ser llamado por varios hilos al mismo tiempo.

Hilos de Nivel Kernel : Son los hilos soportados por el kernel o núcleo del sistema operativo. Estos hilos son gestionados y planificados por el kernel.

Hilos de Nivel Usuario : Son los hilos soportados por la biblioteca o paquete de hilos, y no son conocidos por el kernel del sistema operativo. Estos hilos son gestionados y planificados por el paquete de hilos.

HWP : Hard Weight Process. Véase Proceso Pesado.

Joinable Thread : Véase Hilo sincronizable.

Kernel-space Threads : Véase Hilos de Nivel Kernel.

Lightweight Process : Véase Proceso Ligero.

Llamadas al Sistema con Bloqueo : La mayoría de las llamadas a funciones del sistema suspenden el hilo que realiza la llamada, hasta que se completa la función del sistema.

Llamadas al Sistema sin Bloqueo : Algunos sistemas proporcionan llamadas al sistema que no bloquean el hilo que las realiza, de forma que el kernel notifica al hilo la finalización de la llamada de alguna forma especial. Normalmente son más difíciles de emplear por el programador.

LWP : Light Weight Process. Véase Proceso Ligero.

MT-Safe : Seguro frente a hilos. Véase hilo-seguro.

MT-Unsafe : No seguro frente a hilos. Véase hilo-no-seguro.

Multihilado : Véase Multithreading.

Multithreading : Nombre que se le da a las arquitecturas hardware o software que implementan múltiples hilos de control.

Mútex : Es la abrebiatura de MUTual EXclusion o exclusión mutua. Es una primitiva de sincronización que permite bloquear el acceso a secciones críticas de memoria.

Mútex Attributes : Veáse Atributos de mútex.

Once-execution : Véase Ejecución Una Sola Vez.

Planificación : Es el proceso que consiste en decidir qué hilo se ejecutará a continuación en un determinado procesador. Normalmente implica el cambio de contexto a dicho hilo.

Proceso Ligero : Conocido en algunos sistemas confusamente como hilo de nivel kernel, es una entidad planificable por el kernel. En la mayoría de sistemas consiste de un contexto de ejecución y alguna información contable (aunque mucho menos que la incluida en un proceso pesado).

Proceso Pesado : Es el término empleado para referirse al clásico proceso UNIX, con toda su información de contexto. El término se debe a que el cambio de contexto de procesos UNIX es más "pesado" o costoso que el cambio de contexto de procesos ligeros.

Race Conditions : Véase Condiciones de Ejecución.

Scheduling : Véase Planificación.

Sección Crítica : Es una región de código en la cual los datos a los que se accede pueden ser accedidos por otros hilos, con lo que se pueden obtener inconsistencias en los valores de los datos. Para evitar estos problemas se suelen emplear objetos de sincronización o bloqueos.

Thread : Concepto base de la programación con hilo. Traducido como hilo, hebra, flujo de control o contexto de ejecución dentro de un proceso. Es la unidad planificable para ejecución por la biblioteca de hilos o por el kernel.

User-space Threads : Véase Hilos de Nivel Usuario.

Variable de Condición : Primitiva de sincronización que en conjunción con un mútex permite simular regiones críticas condicionales (estructura de programación concurrente).