Você está na página 1de 2

Seguridad en hilos

La seguridad en hilos es un concepto de programacin aplicable en el contexto de los programas multihilos. Una pieza de cdigo es segura en cuanto a los hilos si funciona correctamente durante la ejecucin simultnea de mltiples hilos. En particular, debe satisfacer la necesidad de que mltiples hilos accedan a los mismos datos compartidos, y la necesidad de que una pieza compartida de datos sea accedida por solo un hilo en un momento dado. La seguridad en hilos es un desafo clave en la programacin multihilos. Antes slo concerna al programador del sistema operativo pero desde los ltimos 1990s ha llegado a ser un asunto comn. En un programa multihilos, varios threads se ejecutan simultneamente en un espacio de direcciones compartido. Cada hilo tiene acceso a virtualmente toda la memoria de cada uno de los otros threads. As el flujo de control y la secuencia de los accesos a datos a menudo tienen poca relacin de lo que sera razonable esperar mirando el texto del programa. Thread-safety es una propiedad necesaria para minimizar el comportamiento inesperado restableciendo algunas de las correspondencias entre el flujo de control actual y el texto del programa.

Determinando la seguridad del hilo


No es fcil determinar si una pieza de cdigo es segura en cuanto a los hilos o no. Sin embargo, hay varios indicadores que sugieren la necesidad de un examen cuidadoso para determinar si es inseguro:

acceder a las variables globales o al heap asignar/liberar recursos que tienen lmites globales (ficheros, procesos y subprocesos, etc.) accesos indirectos a travs de handle o punteros cualquier efecto co-lateral visible (por ejemplo, acceso a variables voltiles en el lenguaje de programacin C)

Una subrutina tiene seguridad en hilos, y por tanto es reentrante, si slo usa variables de la pila, depende slo de los argumentos que le pasen, y slo llama a otras subrutinas con propiedades similares. A esto a veces se le llama "funcin pura" y se parece mucho a una funcin matemtica. No todas las funciones reentrantes son thread-safe.

Consiguiendo la seguridad del hilo


Hay unas pocas maneras de conseguir esta seguridad:

Cdigo reentrante: Bsicamente, escribir cdigo de tal manera que pueda ser interrumpido durante una tarea, ser ejecutado (reentrado) de nuevo para realizar otra tarea, y despus continuar con su

tarea original. Esto normalmente incluye guardar la informacin de estado en variables locales, en lugar de usar variables estticas o variables globales.

Exclusin mutua: El acceso a los datos compartidos es serializado usando mecanismos que aseguran que slo un thread est accediendo a los datos compartidos al mismo tiempo. Se requiere gran cautela si una pieza de cdigo accede a mltiples piezas compartidas de datos - los problemas incluyen condicin de carrera, deadlocks, livelocks, inanicin de recursos (starvation), y otros males enumerados en los libros de texto de los sistemas operativos.

Almacenamiento thread-local: Variables estn localizadas de manera que cada thread tiene su propia copia privada. Las variables retienen sus valores a travs de la subrutina y otros lmites de cdigo, y el cdigo al cual acceden podra no ser reentrante, pero dado que son locales a cada hilo, son thread-safe.

Operacin atmica: Los datos compartidos son accedidos usando Atomicidad la cual no puede ser interrumpida por otros threads. Esto normalmente necesita usar instrucciones especiales del lenguaje mquina, las cuales podran estar disponibles en una biblioteca de runtime. Dado que las operaciones son atmicas, los datos compartidos estn siempre guardados en un estado vlido, sin importar el orden en que los threads acceden. Atomicidad forma la base de muchos mecanismos de bloqueo de thread.

Un idioma de uso general combina estos acercamientos:

hacer cambios a una copia privada de los datos compartidos y entonces actualizad atmicamente los datos compartidos desde la copia privada. As, la mayora del cdigo es concurrente, y se pierde poco tiempo en la serializacin.

Enlaces externos
Short description of thread-safe Writing Reentrant and Thread-Safe Code Thread-safe Tcl Extensions (wiki page) Thread-safe design Article "Write thread-safe servlets" by Phillip Bridgham Article "Smart Pointer Thread Safety" by Dejan Jelovic A Short Guide to Mastering Thread-Safety Wikipedia: http://es.wikipedia.org/wiki/Seguridad_en_hilos

Você também pode gostar